将代码后段的dis[v[i]]<0x3f3f3f3f>>1中的>>1去掉后,程序会卡第12个测试点,反之则能AC,有没有大佬能解释下是为什么?
#include<bits/stdc++.h>
using namespace std;
int t,n,m;
int u[10010],v[10010],w[10010],dis[10010];
int tot;
int a,b,c;
void bell(int s){
memset(dis,0x3f3f3f3f,sizeof(dis));
dis[1]=0;
for(int i=1;i<n;i++){
for(int j=1;j<=tot;j++){
if(dis[u[j]]+w[j]<dis[v[j]]){
dis[v[j]]=dis[u[j]]+w[j];
}
}
}
return ;
}
int main(){
cin>>t;
for(int k=1;k<=t;k++){
cin>>n>>m;
tot=0;
memset(u,0,sizeof(u));
memset(v,0,sizeof(v));
memset(w,0,sizeof(w));
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
if(c>=0){
tot++;
u[tot]=a;
v[tot]=b;
w[tot]=c;
tot++;
u[tot]=b;
v[tot]=a;
w[tot]=c;
}
else {
tot++;
u[tot]=a;
v[tot]=b;
w[tot]=c;
}
}
bell(1);
bool f=true;
for(int i=1;i<=tot;i++){
if((dis[u[i]]+w[i]<dis[v[i]])&&(dis[v[i]]<0x3f3f3f3f>>1)){
cout<<"YES"<<'\n';
f=false;
break;
}
}
if(f) cout<<"NO"<<'\n';
}
return 0;
}