Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33834 | 23级逯一鸣 | 【S】T3 | C++ | 通过 | 100 | 353 MS | 556 KB | 1285 | 2024-10-23 09:36:13 |
#include <iostream> #include <tuple> #include <vector> using namespace std; using i64 = long long; constexpr int INF = 0x3f3f3f3f; bool find_neg_cyc(const vector<tuple<int, int, int>>& edges, int n) { vector<int> dist(n + 1, INF); dist[1] = 0; for (int i = 1; i < n; ++i) { bool relax = false; for (auto [u, v, w] : edges) { if (dist[u] < INF && dist[v] > dist[u] + w) { dist[v] = dist[u] + w; relax = true; } } if (!relax) return false; } for (auto [u, v, w] : edges) { if (dist[u] < INF && dist[v] > dist[u] + w) return true; } return false; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n, m; cin >> n >> m; vector<tuple<int, int, int>> edges(m); for (int i = 0; i < m; ++i) { int u, v; char w; cin >> u >> v >> w; edges.emplace_back(u, v, w == ')' ? -1 : 1); } bool neg = find_neg_cyc(edges, n); for (auto& [_, __, w] : edges) w *= -1; bool pos = find_neg_cyc(edges, n); cout << (pos != neg ? "No\n" : "Yes\n"); return 0; }