제출 #1203866

#제출 시각아이디문제언어결과실행 시간메모리
120386612345678Pipes (CEOI15_pipes)C++20
0 / 100
660 ms13984 KiB
#include <bits/stdc++.h> using namespace std; const int nx=1e5+5; int n, m, u, v, sz[nx], dsu1[nx], dsu2[nx], low[nx], disc[nx], t; vector<int> d[nx]; int find1(int x) { if (dsu1[x]==x) return x; return dsu1[x]=find1(dsu1[x]); } int find2(int x) { if (dsu2[x]==x) return x; return dsu2[x]=find2(dsu2[x]); } void dfs(int u, int p) { low[u]=disc[u]=++t; for (auto v:d[u]) { if (v==p) continue; if (!disc[v]) dfs(v, u), low[u]=min(low[u], low[v]); else low[u]=min(low[u], disc[v]); } if (low[u]==disc[u]&&u!=1) cout<<u<<' '<<p<<'\n'; } int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>m; for (int i=1; i<=n ;i++) dsu1[i]=dsu2[i]=i; for (int i=1; i<=m; i++) { cin>>u>>v; if (find1(u)!=find1(v)) { dsu1[find1(u)]=find1(v); d[u].push_back(v); d[v].push_back(u); } else if (find2(u)!=find2(v)) { dsu2[find2(u)]=find2(v); d[u].push_back(v); d[v].push_back(u); } } for (int i=1; i<=n; i++) if (!disc[i]) dfs(i, i); }
#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...