rt,WA。
#include<bits/stdc++.h>
using namespace std;
int h[10001], nxt[500001], val[500001], zd[500001], cnt = 0;
int n, m, s, dis[10001];
bool inq[10001];
int q[1000001], f, e;
void addedge(int a, int b, int c) {
cnt++;
val[cnt] = c, zd[cnt] = b, nxt[cnt] = 0;
nxt[cnt] = h[a];
h[a] = cnt;
}
int inqnum = 0;
int main() {
int t;
cin >> t;
while (t--) {
inqnum=0;
memset(h,0,sizeof(h));
memset(val,0,sizeof(val));
memset(q,0,sizeof(q));
memset(inq,0,sizeof(inq));
cnt=0;
memset(zd,0,sizeof(zd));
memset(nxt,0,sizeof(nxt));
cin >> n >> m;
s = 1;
for (register int i = 1; i <= m; i++) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
addedge(a, b, c);
if(c>=0)addedge(b, a, c);
}
memset(dis, -1, sizeof(dis));
dis[s] = 0, inq[s] = 1;
q[1] = s, f = 1, e = 1;
while (f <= e) {
int u = q[f++];
for (register int p = h[u]; p; p = nxt[p]) {
int v = zd[p], c = val[p];
if (dis[v] == -1 || dis[v] > dis[u] + c) {
dis[v] = dis[u] + c;
if (inq[v] == 0) {
if(++inqnum>=n){
cout<<"YES\n";
goto l;
}
q[++e] = v, inq[v] = 1;
}
}
}
inq[u] = 0;
}
cout<<"NO\n";
l:{}
}
}