1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<queue> 6 using namespace std; 7 const int maxn=50020; 8 const int inf=0x3f3f3f3f; 9 int head[maxn], dis[maxn], used[maxn]; 10 bool vis[maxn]; 11 int T, n, m; 12 int cnt=0; 13 queue<int> q; 14 struct Edge{ 15 int to, w, next; 16 }e[maxn*4]; 17 inline void add(int u,int v,int w){ 18 cnt++; 19 e[cnt].next=head[u]; 20 e[cnt].w=w; 21 e[cnt].to=v; 22 head[u]=cnt; 23 } 24 inline bool spfa(int s){ 25 memset(dis,0x3f,sizeof(dis)); 26 memset(vis,false,sizeof(vis)); 27 memset(used,0,sizeof(used)); 28 dis[s]=0; 29 q.push(s); 30 vis[s]=true; 31 while(!q.empty()){ 32 int u=q.front(); 33 q.pop(); 34 vis[u]=false; 35 if(used[u]>=n) return false; 36 for(int i=head[u]; i; i=e[i].next){ 37 int v=e[i].to; 38 int w=e[i].w; 39 if(dis[v]>dis[u]+w){ 40 dis[v]=dis[u]+w; 41 used[v]=used[u]+1; 42 if(used[v]>=n) return false; 43 if(!vis[v]){ 44 q.push(v); 45 vis[v]=true; 46 47 } 48 } 49 } 50 } 51 return true; 52 } 53 int main(){ 54 scanf("%d",&T); 55 while(T--){ 56 scanf("%d%d",&n,&m); 57 int a, b, w; 58 memset(head,0,sizeof(head)); 59 for(int i=1; i<=m; i++){ 60 scanf("%d%d%d",&a,&b,&w); 61 add(a, b, w); 62 if(w>=0) add(b, a, w); 63 } 64 if(!spfa(1)) puts("YE5"); 65 else puts("N0"); 66 } 67 return 0; 68 }