提交记录
#include<bits/stdc++.h>
using namespace std;
struct lsqxx{
int v,w,nxt;
}e[100005];
int cnt=0,h[10000];
void add(int u,int v,int w)
{
e[++cnt].v=v,e[cnt].w=w,e[cnt].nxt=h[u];h[u]=cnt;
}
int t,n,m;
int x,y,z,flag;
int dis[10005],vis[10005];
struct ssr{
int x,cnt;
};
queue<ssr>q;
void SPFA()
{
while(!q.empty())
{
if(q.front().cnt>n) {flag=1;return;}
int u=q.front().x;
int cnts=q.front().cnt;
q.pop();
vis[u]=0;
for(int i=h[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(dis[u]+e[i].w>=dis[v]) continue;
dis[v]=dis[u]+e[i].w;
if(vis[v]) continue;
vis[v]=1;
q.push(ssr{v,cnts+1});
}
}
}
int main()
{
cin>>t;
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(z>=0)
add(x,y,z),add(y,x,z);
else
add(x,y,z);
}
memset(dis,0x3f,sizeof(dis));
dis[1]=0;
q.push(ssr{1,0});
SPFA();
if(flag) printf("YES\n");
else printf("NO\n");
flag=0;
cnt=0;
memset(h,0,sizeof(h));
}
return 0;
}