Submission #959294

#TimeUsernameProblemLanguageResultExecution timeMemory
959294Cyber_WolfPipes (CEOI15_pipes)C++17
50 / 100
758 ms65536 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e5+5; vector<int> adj[N]; int tin[N], par[N][2], low[N]; int get1(int src) { if(src == par[src][0]) return src; return par[src][0] = get1(par[src][0]); } bool join1(int u, int v) { u = get1(u), v = get1(v); if(u == v) return false; par[u][0] = v; return true; } int get2(int src) { if(src == par[src][1]) return src; return par[src][1] = get2(par[src][1]); } bool join2(int u, int v) { u = get2(u), v = get2(v); if(u == v) return false; par[u][1] = v; return true; } int n, m, tmp; void dfs(int src, int pa = -1) { bool a = 0; tin[src] = low[src] = ++tmp; for(auto it : adj[src]) { if(it == pa && !a) { a = 1; continue; } if(tin[it]) { low[src] = min(low[src], tin[it]); continue; } dfs(it, src); low[src] = min(low[src], low[it]); if(low[it] > tin[src]) { cout << src << ' ' << it << '\n'; } } return ; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i = 1; i <= n; i++) par[i][0] = par[i][1] = i; for(int i = 0; i < m; i++) { int u, v; cin >> u >> v; if(join1(u, v) || join2(u, v)) { adj[u].push_back(v), adj[v].push_back(u); } } for(int i = 1; i <= n; i++) { if(!tin[i]) dfs(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...