#include <bits/stdc++.h>
using namespace std;
vector<int> muchii[100005];
vector<int> dsu1[100005],dsu2[100005];
int comp1[100005],comp2[100005],par[100005],niv[100005],nivmin[100005];
bool use[100005];
int n,m;
void dfs(int nod)
{
use[nod]=1;
nivmin[nod]=niv[nod];
for(int i:muchii[nod])
{
int node=i;
if(node==par[nod])
continue;
if(!use[node])
{
par[node]=nod;
niv[node]=niv[nod]+1;
dfs(node);
nivmin[nod]=min(nivmin[nod],nivmin[node]);
}
else
nivmin[nod]=min(nivmin[nod],niv[node]);
}
int cnt=0;
if(nivmin[nod]==niv[nod]&&par[nod]!=0)
{
for(int i:muchii[nod])
if(i==par[nod])
cnt++;
if(cnt==1)
cout<<par[nod]<<' '<<nod<<'\n';
}
}
void dsu_merge1(int c1,int c2)
{
if(dsu1[c1].size()<dsu1[c2].size())
swap(c1,c2);
for(int i:dsu1[c2])
{
comp1[i]=c1;
dsu1[c1].push_back(i);
}
dsu1[c2].clear();
}
void dsu_merge2(int c1,int c2)
{
if(dsu2[c1].size()<dsu2[c2].size())
swap(c1,c2);
for(int i:dsu2[c2])
{
comp2[i]=c1;
dsu2[c1].push_back(i);
}
dsu2[c2].clear();
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
dsu1[i].push_back(i);
dsu2[i].push_back(i);
comp1[i]=i;
comp2[i]=i;
}
for(int i=1;i<=m;i++)
{
int a,b;
cin>>a>>b;
if(comp1[a]!=comp1[b])
{
dsu_merge1(comp1[a],comp2[b]);
muchii[a].push_back(b);
muchii[b].push_back(a);
}
else
{
if(comp2[a]!=comp2[b])
{
dsu_merge2(comp2[a],comp2[b]);
muchii[a].push_back(b);
muchii[b].push_back(a);
}
}
}
for(int i=1;i<=n;i++)
{
dsu1[i].clear();
dsu2[i].clear();
}
for(int i=1;i<=n;i++)
if(!use[i])
dfs(i);
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
7380 KB |
Output is correct |
2 |
Correct |
3 ms |
7380 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
8216 KB |
Output is correct |
2 |
Correct |
11 ms |
8020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
260 ms |
8280 KB |
Output is correct |
2 |
Correct |
280 ms |
10280 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
497 ms |
19852 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
722 ms |
14636 KB |
Output is correct |
2 |
Runtime error |
739 ms |
37156 KB |
Memory limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1093 ms |
29968 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1751 ms |
34816 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
2835 ms |
65536 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3500 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3602 ms |
65540 KB |
Memory limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |