WA on #12
玄关,求调
#include <iostream>
using namespace std;
typedef long long ll;
const ll inf = 1e9;
ll dis[100000],u[100000],v[100000],w[100000];
int main(){
ll T,n,m,i,j,flag,tot;
cin>>T;
while(T--){
cin>>n>>m;
tot = m;
for(i = 1;i <= m;i++){
cin>>u[i]>>v[i]>>w[i];
if(w[i] >= 0){//大于等于0就再建一条反向的边
u[++tot] = v[i];
v[tot] = u[i];
w[tot] = w[i];
}
}
//初始化
for(i = 1;i <= n;i++) dis[i] = inf;
dis[1] = 0;
m = tot;//tot是边的数量
for(j = 1;j <= n - 1;j++){
for(i = 1;i <= m;i++){
if(dis[v[i]] > dis[u[i]] + w[i]){
dis[v[i]] = dis[u[i]] + w[i];//松弛
}
}
}
//判负环
flag = 0;
for(i = 1;i <= m;i++){
if(dis[v[i]] > dis[u[i]] + w[i]) flag = 1;
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}