Submission #169468

#TimeUsernameProblemLanguageResultExecution timeMemory
169468Andrei_CotorPipes (CEOI15_pipes)C++14
0 / 100
5101 ms5880 KiB
#include<iostream> #include<vector> using namespace std; int ParLink[100005],P[100005],Lev[100005],Sz[100005],Low[100005],Covered[100005],Prv[100005]; pair<int,int> Edge[100005]; vector<pair<int,int> > A[100005]; int parentLink(int x) { int cx=x; while(ParLink[x]!=0) x=ParLink[x]; while(cx!=0) { int aux=ParLink[cx]; ParLink[cx]=x; cx=aux; } return x; } void dfs(int nod, int p, int lev, int px) { P[nod]=px; Lev[nod]=lev; for(auto other:A[nod]) if(other.first!=p) { Prv[other.first]=other.second; dfs(other.first,nod,lev+1,px); Low[parentLink(other.second)]=nod; } } void unite(int x, int y, int nr) { int px=P[x]; int py=P[y]; if(Sz[px]<Sz[py]) { swap(x,y); swap(px,py); } Sz[px]+=Sz[py]; A[x].push_back({y,nr}); A[y].push_back({x,nr}); Prv[y]=nr; Low[nr]=x; ParLink[nr]=0; dfs(y,x,Lev[x]+1,px); } void update(int x, int y) { while(x!=y) { if(Lev[x]<Lev[y]) swap(x,y); Covered[Prv[x]]=1; x=Low[parentLink(Prv[x])]; } } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; for(int i=1; i<=n; i++) { Sz[i]=1; P[i]=i; Lev[i]=1; } int nr=0; for(int i=1; i<=m; i++) { int x,y; cin>>x>>y; if(P[x]!=P[y]) { nr++; Edge[nr]={x,y}; unite(x,y,nr); } else update(x,y); } for(int i=1; i<=nr; i++) if(!Covered[i]) cout<<Edge[i].first<<" "<<Edge[i].second<<"\n"; 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...