#include<iostream>
#include<vector>
using namespace std;
int ParLink[100005],P[100005],Lev[100005],Sz[100005],Low[100005],Covered[100005],Prv[100005],SzLink[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 uniLink(int x, int y)
{
x=parentLink(x);
y=parentLink(y);
if(x==y)
return;
if(SzLink[x]>SzLink[y])
{
SzLink[x]+=SzLink[y];
ParLink[y]=x;
}
else
{
SzLink[y]+=SzLink[x];
ParLink[x]=y;
}
}
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;
SzLink[nr]=1;
dfs(y,x,Lev[x]+1,px);
}
void update(int x, int y)
{
int prvLinkx=0;
int prvLinky=0;
while(x!=y)
{
if(Lev[x]<Lev[y])
{
swap(x,y);
swap(prvLinkx,prvLinky);
}
Covered[Prv[x]]=1;
if(prvLinkx!=0)
uniLink(Prv[x],prvLinkx);
prvLinkx=Prv[x];
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 time |
Memory |
Grader output |
1 |
Execution timed out |
5093 ms |
2680 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5016 ms |
2908 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5091 ms |
2936 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5069 ms |
3064 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5062 ms |
3576 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5098 ms |
5112 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5024 ms |
5112 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5025 ms |
5880 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5099 ms |
5880 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
5032 ms |
5624 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |