
1 #include<bits/stdc++.h> 2 #define I inline 3 using namespace std; 4 using namespace std; 5 const int N=2010; 6 const int M=3010; 7 I int read() 8 { 9 int x=0,f=1;char ch=getchar(); 10 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 11 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 12 return x*f; 13 } 14 15 struct node 16 { 17 int nxt,to,dis; 18 }g[M<<1]; 19 int head[N],tot; 20 int T,n,m; 21 int dist[N],cnt[N]; 22 bool vis[N]; 23 24 I void addedge(int u,int v,int dis) 25 { 26 g[++tot].nxt=head[u]; 27 g[tot].to=v; 28 g[tot].dis=dis; 29 head[u]=tot; 30 } 31 32 I bool spfa() 33 { 34 memset(vis,0,sizeof(vis)); 35 memset(cnt,0,sizeof(cnt)); 36 memset(dist,127,sizeof(dist)); 37 queue<int>q;q.push(1);vis[1]=0;dist[1]=0; 38 while(q.size()) 39 { 40 int u=q.front();q.pop();vis[u]=0; 41 for(int i=head[u];i;i=g[i].nxt) 42 { 43 int v=g[i].to; 44 if(dist[v]>dist[u]+g[i].dis) 45 { 46 cnt[v]=cnt[u]+1; 47 if(cnt[v]>n)return 1; 48 dist[v]=dist[u]+g[i].dis; 49 if(!vis[v])vis[v]=1,q.push(v); 50 } 51 } 52 } 53 return 0; 54 } 55 56 57 int main() 58 { 59 T=read(); 60 while(T--) 61 { 62 n=read();m=read();tot=0; 63 memset(head,0,sizeof(head)); 64 for(int i=1;i<=m;i++) 65 { 66 int x=read(),y=read(),z=read(); 67 if(z<0)addedge(x,y,z); 68 else addedge(y,x,z),addedge(x,y,z); 69 } 70 if(spfa())puts("YE5"); 71 else puts("N0"); 72 } 73 }