以下的代码Wa 1,6。
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef long long LL;
const int N=3e3+5, INF=9e18;
int n;
int dis[N],f[N];
int pos[N][N];
bool vis[N];
int bk[N][N];
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&dis[i]);
f[i]=1;
}
int a,b,c;
while(scanf("%lld%lld%lld",&a,&b,&c)!=EOF){
a++; b++; c++;
pos[a][b]=c;
pos[b][a]=c;
}
for(int t=1;t<=n;t++){
int sum=INF, nw=0;
for(int i=1;i<=n;i++)
if(!vis[i] && dis[i]<sum){
sum=dis[i];
nw=i;
}
vis[nw]=1;
for(int i=1;i<=n;i++){
if(pos[i][nw]){
int j=pos[i][nw];
if(dis[j]>dis[nw]+dis[i]){
dis[j]=dis[nw]+dis[i];
f[j]=f[nw]*f[i];
}
else if(dis[j]==dis[nw]+dis[i]){
if(bk[i][nw] == dis[j]) continue;
f[j]+=f[nw]*f[i];
}
bk[i][nw]=bk[nw][i]=dis[j];
}
}
}
printf("%lld %lld",dis[1],f[1]);
return 0;
}
但是我只要在代码中的 if(pos[i][nw]) 变为 if(pos[i][nw] && vis[i]) 就能AC,求问为什么/kel