Submission #728073

#TimeUsernameProblemLanguageResultExecution timeMemory
728073n0sk1llPipes (CEOI15_pipes)C++17
100 / 100
968 ms13348 KiB
#include <vector> #include <iostream> #define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);cerr.tie(0) using namespace std; int up[2][100005]; int Up(bool c, int x) { if (up[c][x]<0) return x; return up[c][x]=Up(c,up[c][x]); } bool dsu(bool c, int a, int b) { a=Up(c,a),b=Up(c,b); if (a==b) return false; if (up[c][a]<up[c][b]) swap(a,b); up[c][b]+=up[c][a],up[c][a]=b; return true; } int par[100010]; int idx[100010]; int lowl[100010]; int nt; vector<int> edge[100010]; void dfs(int x){ idx[x] = lowl[x] = ++nt; bool cl = false; for(int y:edge[x]){ if(par[x] == y && !cl){ cl=true; continue; } if(!idx[y]){ par[y]=x; dfs(y); lowl[x] = min(lowl[x], lowl[y]); } else lowl[x] = min(lowl[x], idx[y]); } if(par[x] && idx[x]==lowl[x]) cout<<x<<" "<<par[x]<<"\n"; } int main() { FAST; int n,m; cin>>n>>m; for (int c=0;c<2;c++) for (int i=1;i<=n;i++) up[c][i]=-1; while (m--) { int u,v; cin>>u>>v; if (dsu(0,u,v) || dsu(1,u,v)) edge[u].push_back(v),edge[v].push_back(u); } for (int i=1;i<=n;i++) if (up[0][i]<0) dfs(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...