1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int maxn = 2020; struct Edge { int v, w; }; vector<Edge> g[maxn]; int T, n, m; // SPFA int dis[maxn], cnt[maxn]; bool ins[maxn]; // 判断是否在队列中 bool spfa() { stack<int> stk; memset(dis, 0x3f, sizeof(int)*(n+1)); memset(cnt, 0, sizeof(int)*(n+1)); memset(ins, 0, sizeof(bool)*(n+1)); dis[1] = 0; stk.push(1); while (!stk.empty()) { int u = stk.top(); stk.pop(); ins[u] = false; if (++cnt[u] > n * 10) return true; for (auto e : g[u]) { int v = e.v, w = e.w; if (dis[v] > dis[u] + w) { dis[v] = dis[u] + w; if (!ins[v]) ins[v] = true, stk.push(v); } } } return false; } int main() { scanf("%d", &T); while (T--) { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) g[i].clear(); for (int i = 0; i < m; i++) { int u, v, w; scanf("%d%d%d", &u, &v, &w); g[u].push_back({v, w}); if (w >= 0) g[v].push_back({u, w}); } puts(spfa() ? "YES" : "NO"); } return 0; }
- 1
信息
- ID
- 29
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者