#include using namespace std; int t, n, m, u, v, w, cnt, dist[2005]; bool flag; struct node { int u, v, w; node() { u = v = w = 0; } node(int _u, int _v, int _w) { u = _u; v = _v; w = _w; } } g[6005]; int main() { cin >> t; while (t--) { cnt = 0; flag = false; memset(g, 0x00, sizeof(g)); memset(dist, 0x3f, sizeof(dist)); cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> u >> v >> w; g[++cnt] = node(u, v, w); if (w >= 0) g[++cnt] = node(v, u, w); } dist[1] = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= cnt; j++) { if (dist[g[j].u] == 0x3f3f3f3f) continue; dist[g[j].v] = min(dist[g[j].v], dist[g[j].u] + g[j].w); } } for (int i = 1; i <= cnt; i++) { if (dist[g[i].u] == 0x3f3f3f3f || dist[g[i].v] == 0x3f3f3f3f) continue; if (dist[g[i].v] > dist[g[i].u] + g[i].w) { flag = true; } } cout << (flag ? "YES" : "NO") << endl; } return 0; }