제출 #1156062

#제출 시각아이디문제언어결과실행 시간메모리
1156062KindaGoodGamesPipes (CEOI15_pipes)C++17
0 / 100
30 ms10560 KiB
#include<bits/stdc++.h> using namespace std; struct UnionFind{ vector<int> par; UnionFind(int n){ par.resize(n); iota(par.begin(),par.end(),0); } int find(int i){ if(par[i] == i) return i; else return par[i] = find(par[i]); } void unite(int i, int j){ i = find(i); j = find(j); par[i] = j; } }; stack<int> occ; bool DFS(int v, int p, int t, vector<set<int>>& adj){ if(v == t){ occ.push(v); return true; } bool onPath = false; for(auto u : adj[v]){ if(u == p) continue; bool ans = DFS(u,v,t,adj); onPath |= ans; } if(onPath){ occ.push(v); } return onPath; } int main(){ int n, m; cin >> n >> m; UnionFind ufC(n); UnionFind uf2(n); vector<set<int>> adjB(n); for(int k = 0; k < m; k++){ int a,b; cin >> a >> b; a--;b--; if(uf2.find(a) == uf2.find(b)){ continue; }else if(uf2.find(a) != uf2.find(b) && ufC.find(a) != ufC.find(b)){ // add a new bridge adjB[a].insert(b); adjB[b].insert(a); ufC.unite(a,b); }else if(uf2.find(a) != uf2.find(b) && ufC.find(a) == ufC.find(b)){ DFS(a,a,b,adjB); int u = occ.top(); while(occ.size()){ int w = occ.top(); occ.pop(); adjB[u].erase(w); adjB[w].erase(u); u = w; } } } set<pair<int,int>> edges; for(int i = 0; i <n; i++){ for(auto u : adjB[i]){ if(edges.count({i,u}) || edges.count({u,i})){ continue; } edges.insert({i,u}); } } cout << endl; for(auto u : edges){ cout << u.first +1 << " " << u.second +1 << endl; } }
#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...