码风巨丑请巨佬门见谅
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
int elast[2005],dis[2005],cnt[2005],n,m;
bool use[2005];
struct node
{
int x,y,next;
}e[6005];
string spfa(int x)
{
memset(dis,0x3f3f3f3f,sizeof(dis));
memset(use,false,sizeof(use));
memset(cnt,0,sizeof(cnt));
queue<int> q;
dis[x] = 0;
q.push(x);
use[x] = true;
cnt[x]++;
while(!q.empty())
{
int tot = q.front(),t;
q.pop();
use[tot] = false;
for(int i = elast[tot];i != 0;i = e[i].next)
{
int u = e[i].x;
if(dis[u] > dis[tot] + e[i].y)
{
dis[u] = dis[tot] + e[i].y;
if(!use[u])
{
q.push(u);
use[u] = true;
cnt[u]++;
if(cnt[u] == n) return "YES";
}
}
}
}
return "NO";
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
memset(elast,0,sizeof(elast));
int cntt = 0;
for(int i = 1;i <= m;i++)
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(c >= 0)
{
cntt++;
e[cntt].x = b;
e[cntt].y = c;
e[cntt].next = elast[a];
elast[a] = cntt;
cntt++;
e[cntt].x = a;
e[cntt].y = c;
e[cntt].next = elast[b];
elast[b] = cntt;
}
else
{
cntt++;
e[cntt].x = b;
e[cntt].y = c;
e[cntt].next = elast[a];
elast[a] = cntt;
}
}
cout << spfa(1) << endl;
}
return 0;
}