本人马蜂良好
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN = 2e3 + 5;
ll t, n, m, u, v, w, dis[MAXN], ind[MAXN];
struct node {
ll v, w;
};
vector<node> adj[MAXN];
bool vis[MAXN];
bool SPFA() {
queue<ll> q;
for(ll i = 1; i <= n; ++i) {
dis[i] = 1e18;
vis[i] = 0;
ind[i] = 0;
}
dis[1] = 0, vis[1] = 1, ind[1] = 1;
q.push(1);
while(!q.empty()) {
u = q.front();
q.pop();
vis[u] = 0;
for(auto i : adj[u]) {
v = i.v, w = i.w;
if(dis[v] > dis[u] + w) {
dis[v] = dis[u] + w;
if(!vis[v]) {
q.push(v);
vis[v] = 1;
++ind[v];
if(ind[v] > n){
return 0;
}
}
}
}
}
return 1;
}
int main() {
//freopen("P3385_1.in","r",stdin);
//freopen("test.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> t;
while(t--) {
cin >> n >> m;
for(ll i = 1; i <= m; ++i) {
cin >> u >> v >> w;
adj[u].emplace_back(node{v,w});
if(w >= 0) {
adj[v].emplace_back(node{u,w});
}
}
if(!SPFA()) {
puts("YES");
}
else {
puts("NO");
}
for(ll i = 1; i <= n; ++i) {
adj[i].clear();
}
}
return 0;
}