大佬帮忙看看,debug了快1h了QwQ
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N = 4e6 + 10;
int h[N] , e[N << 1] , ne[N << 1] , idx;
int dist[N] , w[N] , cnt[N];
int vis[N];
int T;
int n , m;
void add(int u , int v , int val){
w[idx] = val;
e[idx] = v;
ne[idx] = h[u];
h[u] = idx++;
}
bool spfa(){
queue<int> q;
for(int i = 1;i <= n;i++){
vis[i] = true;
q.push(i);
}
dist[1] = 0;
while(!q.empty()){
int t = q.front();
q.pop();
vis[t] = false;
for(int i = h[t];~i;i = ne[i]){
int j = e[i];
if(dist[j] > dist[t] + w[i]){
dist[j] = dist[t] + w[i];
if(cnt[j] >= n) return true;
if(!vis[j]){
vis[j] = true;
q.push(j);
cnt[j] = cnt[t] + 1;
}
}
}
}
return false;
}
int main(){
cin >> T;
memset(h , -1 , sizeof h);
memset(dist , 0x3f , sizeof dist);
memset(vis , 0 , sizeof vis);
memset(cnt , 0 , sizeof cnt);
memset(e , 0 , sizeof e);
memset(ne , 0 , sizeof ne);
memset(w , 0 , sizeof w);
while(T--){
idx = 0;
cin >> n >> m;
while(m--){
int u , v , val;
cin >> u >> v >> val;
if(val >= 0) add(u , v , val) , add(v , u , val);
else add(u , v , val);
}
if(spfa()) puts("YES");
else puts("NO");
memset(h , -1 , sizeof h);
memset(dist , 0x3f , sizeof dist);
memset(vis , 0 , sizeof vis);
memset(cnt , 0 , sizeof cnt);
memset(e , 0 , sizeof e);
memset(ne , 0 , sizeof ne);
memset(w , 0 , sizeof w);
}
return 0;
}