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 }