貌似只会输出 NO
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <map>
using namespace std;
struct edge{
int v,w;
edge(int _v=0,int _w=0){
v=_v;
w=_w;
}
};
vector<edge>e[11100];
int dis[11100],vis[11100],cnt[11100];
queue<int>q;
void spfa(int n,int s){
for(int i=1;i<=n;i++){
dis[i]=1e9;
cnt[i]=0;
}
dis[s]=0;
vis[s]=1;
cnt[s]=1;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
for(int i=1;i<=e[u].size();i++){
int v=e[u][i].v,w=e[u][i].w;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
if(!vis[v]){
q.push(v);
cnt[v]++;
vis[v]=1;
if(cnt[v]>n){
cout<<"YES\n";
return;
}
}
}
}
}
cout<<"NO\n";
}
int main(){
int t,n,m,u,v,w;
cin>>t;
while(t--){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
e[u].push_back(edge(v,m));
if(w>=0)e[v].push_back(edge(u,w));
}
spfa(n,1);
for(int j=1;j<=n;j++)e[j].clear();
while(!q.empty())q.pop();
}
return 0;
}