1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #include <bits/stdc++.h> #define int long long #define endl '\n' using namespace std;
int n, m, e; const int N = 1e5; struct Node { int u, v, w; }; vector<Node> g(N); vector<int> d(N, INT_MAX);
bool bellman_ford() { d[1] = 0; for (int k = 1; k <= n - 1; k++) { for (int i = 0; i < e; i++) { int u = g[i].u, v = g[i].v, w = g[i].w; if (d[u] != INT_MAX && d[u] + w < d[v]) { d[v] = d[u] + w; } } } for (int i = 0; i < e; i++) { int u = g[i].u, v = g[i].v, w = g[i].w; if (d[u] != INT_MAX && d[u] + w < d[v]) { return true; } } return false; }
void solve() { cin >> n >> m; e = 0; for (int i = 1; i <= m; i++) { int u, v, w; cin >> u >> v >> w; if (w >= 0) { g[e++] = {u, v, w}; g[e++] = {v, u, w}; } else { g[e++] = {u, v, w}; } } if (bellman_ford()) { cout << "YES" << endl; } else { cout << "NO" << endl; } }
signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int T = 1; cin >> T; while (T--) solve(); return 0; }
|