P3385 负环
#include <bits/stdc++.h>
using namespace std;
vector<int> v[2005], c[2005];
int dis[2005],kis[2005];
bool vis[2005];
signed main(){
int n, m, s ,t; cin>>t;
while(t--){
for(int i=0;i<=2000;i++)v[i].clear();
scanf("%d%d", &n, &m);
s=1;
for (int i = 0; i < m; i++){
int a, b, cost; scanf("%d%d%d", &a, &b, &cost);
if(cost>=0){v[a].push_back(b); c[a].push_back(cost);v[b].push_back(a); c[b].push_back(cost);}
else {v[a].push_back(b);c[a].push_back(cost);}
}
queue<int> q;
memset(kis,0,sizeof(kis));
memset(vis,0,sizeof(vis));
q.push(s);
kis[s]=0;
for(int i=1;i<=2000;i++)dis[i]=2147483647;
dis[s]=0;
vis[s]=1;
int f=0;
int f2=0;
while (!q.empty()){
int now = q.front(); q.pop();
vis[now] = 0;
if(f==1)break;
for (int i = 0; i < v[now].size(); i++){
if (dis[now] + c[now][i] < dis[v[now][i]]){
dis[v[now][i]] = dis[now] + c[now][i];
if (1){
kis[v[now][i]]=kis[now]+1;
if(kis[v[now][i]]>=n){cout<<"YES";f=1;break;}
if(vis[v[now][i]]==0){ q.push(v[now][i]), vis[v[now][i]] = 1;}
}
}
}
}
if(!f)cout<<"NO";
cout<<endl;
}
return 0;
}
20分,哪里错了,玄关