#include<bits/stdc++.h>
using namespace std;
#define int long long
int T,n,m,t,u,v,w,cnt;
int first[2005],dis[2005],visit[2005];
int tong[2005];
struct node{
int to,w,next;
}edge[8005];
inline void add(int u,int v,int w){
edge[++cnt].to = v;
edge[cnt].w = w;
edge[cnt].next = first[u];
first[u] = cnt;
}
deque<int> que;
inline void SPFA(){
memset(visit,0,sizeof(visit));
memset(first,0,sizeof(first));
memset(tong,0,sizeof(tong));
cnt = 0;
while(!que.empty()){
que.pop_front();
}
cin>>n>>m;
while(m--){
cin>>u>>v>>w;
if(w < 0){
add(u,v,w);
}else{
add(u,v,w);
add(v,u,w);
}
}
for(int i = 1;i <= n;i++){
dis[i] = INT_MAX;
}
que.push_front(1);
dis[1] = 0;
visit[1] = 1;
while(!que.empty()){
int x = que.front();
que.pop_front();
visit[x] = 0;
for(int i = first[x];i;i = edge[i].next){
int y = edge[i].to;
if(dis[y] > dis[x] + edge[i].w){
dis[y] = dis[x] + edge[i].w;
if(visit[y] == 0){
visit[y] = 1;
if(!que.empty() && dis[y] < dis[que.front()]){
que.push_front(y);
}else{
que.push_back(y);
}
tong[y]++;
if(tong[y] >= n){
cout<<"YES\n";
return ;
}
}
}
}
}
cout<<"NO\n";
return ;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>T;
while(T--){
SPFA();
}
return 0;
}
(#9WA)
SPFA这道题为什么加上优化后就错了,不加优化就没问题呢?????