Submission #1085986

#TimeUsernameProblemLanguageResultExecution timeMemory
1085986juicyPipes (CEOI15_pipes)C++17
40 / 100
727 ms56668 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif const int N = 1e5; struct dsu { int pr[N]; dsu() { memset(pr, -1, sizeof(pr)); } int find(int u) { return pr[u] < 0 ? u : pr[u] = find(pr[u]); } bool mrg(int u, int v) { if ((u = find(u)) == (v = find(v))) { return 0; } pr[v] = u; return 1; } } a, b; int n, m; int low[N], num[N]; vector<int> g[N]; void add(int u, int v) { g[u].push_back(v); g[v].push_back(u); } int timer; void dfs(int u, int p) { low[u] = num[u] = ++timer; bool flg = 0; for (int v : g[u]) { if (v == p && !flg) { flg = 1; continue; } if (!num[v]) { dfs(v, u); low[u] = min(low[u], low[v]); if (low[v] > num[u]) { cout << u + 1 << " " << v + 1 << "\n"; } } else { low[u] = min(low[u], num[v]); } } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; while (m--) { int u, v; cin >> u >> v; --u, --v; if (a.mrg(u, v)) { add(u, v); } else if (b.mrg(u, v)) { add(u, v); } } for (int i = 0; i < n; ++i) { if (!num[i]) { dfs(i, i); } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...