Submission #1245304

#TimeUsernameProblemLanguageResultExecution timeMemory
1245304pastaPipes (CEOI15_pipes)C++20
100 / 100
566 ms14504 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define pb push_back // #define int ll const int maxn = 1e5 + 10; int par1[maxn], par2[maxn], sz1[maxn], sz2[maxn]; int get1(int v) { if (par1[v] == v) return v; else return par1[v] = get1(par1[v]); } bool merge1(int v, int u) { v = get1(v); u = get1(u); if (v == u) return false; if (sz1[v] < sz1[u]) swap(v, u); sz1[v] += sz1[u]; par1[u] = v; return true; } int get2(int v) { if (par2[v] == v) return v; else return par2[v] = get2(par2[v]); } bool merge2(int v, int u) { v = get2(v); u = get2(u); if (v == u) return false; if (sz2[v] < sz2[u]) swap(v, u); sz2[v] += sz2[u]; par2[u] = v; return true; } int n, m, dep[maxn]; vector<int> G[maxn]; bool mark[maxn]; vector<pii> candi; int dfs(int v, int p, int depth) { mark[v] = 1; dep[v] = depth; int res = depth, cnt = 0; for (int u : G[v]) { if (u == p && cnt == 0) { cnt++; continue; } if (mark[u]) res = min(res, dep[u]); else res = min(res, dfs(u, v, depth + 1)); } if (p != 0 && res == depth) { candi.pb({p, v}); } return res; } void cutEdge() { for (int i = 1; i <= n; i++) { if (!mark[i]) dfs(i, 0, 0); } for (auto [v, u] : candi) cout << v << ' ' << u << '\n'; } int main() { ios_base::sync_with_stdio(false);cout.tie(0);cin.tie(0); cin >> n >> m; for (int i = 1; i <= n; i++) { sz1[i] = sz2[i] = 1; par1[i] = par2[i] = i; } for (int i = 1; i <= m; i++) { int v, u; cin >> v >> u; if (get1(v) != get1(u)) { merge1(v, u); G[v].pb(u); G[u].pb(v); continue; } else if (get2(v) != get2(u)) { merge2(v, u); G[v].pb(u); G[u].pb(v); continue; } } cutEdge(); }
#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...