这是CODE
#include<bits/stdc++.h>
using namespace std;
struct edge{
int v,w;
};
vector<edge> E[115211];
queue<int> q;
int r[115211],d[115211];
bool b[115211];
int t,n,m,s,from,to,va;
edge temp;
void solve(){
memset(d,0x3f,sizeof(d));
memset(b,0,sizeof(b));
memset(r,0,sizeof(r));
while(!q.empty())q.pop();
for(int i=1;i<=n;i++)E[i].clear();
cin>>n>>m;
s=1;
for(int i=0;i<m;i++){
cin>>from>>to>>va;
temp.v=to,temp.w=va;
E[from].push_back(temp);
temp.v=from;
if(va>=0)E[to].push_back(temp);
}
q.push(s);
b[s]=1,r[s]++,d[s]=0;//起始点入队
while(!q.empty()){
int u=q.front();//队头
for(int i=0;i<E[u].size();i++){
if(d[u]+E[u][i].w<d[i]){//松弛
d[i]=d[u]+E[u][i].w;
if(!b[i]){
b[i]=1,q.push(i),r[i]++;//入队
if(r[i]>n-1){//负环
cout<<"YES"<<'\n';
return ;
}
}
}
}
for(int i=1;i<=n;i++){
cout<<d[i]<<' ';
}
cout<<'\n';
q.pop();
}
cout<<"NO"<<'\n';
return ;
}
int main(){
cin>>t;
while(t--){
solve();
}
return 0;
}
/*
2
3 4
1 2 2
1 3 4
2 3 1
3 1 -3
3 3
1 2 3
2 3 4
3 1 -8
*/
这是结果
2
3 4
1 2 2
1 3 4
2 3 1
3 1 -3
0 1061109567 1061109567
0 1061109567 1061109567
NO
3 3
1 2 3
2 3 4
3 1 -8
0 1061109567 1061109567
0 1061109567 1061109567
NO
百思不得其解