제출 #95119

#제출 시각아이디문제언어결과실행 시간메모리
95119MrTEKPipes (CEOI15_pipes)C++14
100 / 100
1222 ms13156 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int,int> ii; const int N = 1e5 + 5; int n,m,u,v,t,tin[N],fup[N]; vector <int> ed[N]; bool vis[N]; class dsu { public: int dad[N]; void init() { for (int i = 1 ; i <= n ; i++) dad[i] = i; } int find(int x) { if (x == dad[x]) return x; return dad[x] = find(dad[x]); } bool merge(int x,int y) { int dx = find(x) , dy = find(y); if (dx == dy) return false; dad[dx] = dy; return true; } }t1,t2; int dfs(int cur,int par) { vis[cur] = true; tin[cur] = fup[cur] = ++t; int cnt = 0; for (auto i : ed[cur]) { if (i == par) { cnt++; continue; } if (vis[i]) fup[cur] = min(fup[cur],tin[i]); else{ int temp = dfs(i,cur); fup[cur] = min(fup[cur],fup[i]); if (fup[i] > tin[cur] && temp == 1) cout << cur << " " << i << "\n"; } } return cnt; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; t1.init(); t2.init(); for (int i = 1 ; i <= m ; i++) { cin >> u >> v; if (t1.merge(u,v) || t2.merge(u,v)) { ed[u].push_back(v); ed[v].push_back(u); } } for (int i = 1 ; i <= n ; i++) if (vis[i] == false) dfs(i,-1); }
#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...