Submission #527309

#TimeUsernameProblemLanguageResultExecution timeMemory
527309siewjhPipes (CEOI15_pipes)C++17
100 / 100
1053 ms15640 KiB
#include <iostream> #include <vector> #include <algorithm> #include <climits> using namespace std; const int MAXN = 100'005; vector<vector<int>> adjlist; vector<int> tvis, lo; int cnt = 0; void dfs(int x, int par) { tvis[x] = lo[x] = cnt++; bool vpar = 0; for (auto nxt : adjlist[x]) { if (nxt == par && !vpar) { vpar = 1; continue; } if (tvis[nxt] != -1) lo[x] = min(lo[x], tvis[nxt]); else { dfs(nxt, x); lo[x] = min(lo[x], lo[nxt]); if (lo[nxt] > tvis[x]) cout << nxt << ' ' << x << '\n'; } } } int root(int a, vector<int>& par) { if (par[a] == -1) return a; else return par[a] = root(par[a], par); } void merge(int a, int b, vector<int>& par, vector<int> &rank) { if (rank[a] > rank[b]) swap(a, b); // b has higher rank par[a] = b; if (rank[a] == rank[b]) rank[b]++; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int nodes, edges; cin >> nodes >> edges; vector<int> par1(nodes + 1, -1), par2(nodes + 1, -1), rank1(nodes + 1, -1), rank2(nodes + 1, -1); adjlist.resize(nodes + 1); tvis.resize(nodes + 1); lo.resize(nodes + 1); for (int i = 0; i < edges; i++) { int a, b; cin >> a >> b; if (root(a, par1) != root(b, par1)) { merge(root(a, par1), root(b, par1), par1, rank1); adjlist[a].push_back(b); adjlist[b].push_back(a); } else if (root(a, par2) != root(b, par2)) { merge(root(a, par2), root(b, par2), par2, rank2); adjlist[a].push_back(b); adjlist[b].push_back(a); } } for (int i = 1; i <= nodes; i++) tvis[i] = -1; for (int i = 1; i <= nodes; i++) if (tvis[i] == -1) dfs(i, -1); 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...