#include <bits/stdc++.h>
using namespace std;
const int N = 100001, H = 17;
int n, m, p[N], P[N], c[N], d[N], s[N];
vector<int> e[N];
int f(int x){ return p[x] = (x == p[x] ? x : f(p[x])); }
int F(int x){ return P[x] = (x == P[x] ? x : F(P[x])); }
void g(int x, int y, int z){
for(int i : e[x]) if(i != y) g(i, x, z + 1);
if(s[x] != y && x != f(x)) P[s[x]] = (P[x] == x ? s[x] : P[x]);
d[x] = z; s[x] = y;
}
int main(){
scanf("%d%d", &n, &m);
iota(p, p + n + 1, 0);
iota(P, P + n + 1, 0);
iota(s, s + n + 1, 0);
fill(c + 1, c + n + 1, 1);
for(int x, y; m--; ){
scanf("%d%d", &x, &y);
if(f(x) != f(y)){
if(c[f(x)] < c[f(y)]) swap(x, y);
g(y, x, d[x] + 1); P[y] = y;
e[x].push_back(y); e[y].push_back(x);
c[f(x)] += c[f(y)]; p[f(y)] = f(x);
}
else{
x = F(x); y = F(y);
while(x != y){
if(d[x] > d[y]){ P[x] = F(P[s[x]]); x = F(x); }
else{ P[y] = F(P[s[y]]); y = F(y); }
}
}
}
for(int i = 1; i <= n; i++) if(P[i] == i && s[i] != i) printf("%d %d\n", i, s[i]);
}
Compilation message
pipes.cpp: In function 'int main()':
pipes.cpp:19:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &n, &m);
~~~~~^~~~~~~~~~~~~~~~
pipes.cpp:25:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &x, &y);
~~~~~^~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
2688 KB |
Output is correct |
2 |
Execution timed out |
5028 ms |
2688 KB |
Time limit exceeded |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
2944 KB |
Output is correct |
2 |
Execution timed out |
5091 ms |
2816 KB |
Time limit exceeded |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
120 ms |
2816 KB |
Output is correct |
2 |
Execution timed out |
5044 ms |
2816 KB |
Time limit exceeded |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
214 ms |
3200 KB |
Output is correct |
2 |
Execution timed out |
5087 ms |
3044 KB |
Time limit exceeded |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
345 ms |
3960 KB |
Output is correct |
2 |
Correct |
290 ms |
4216 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
5088 ms |
5496 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
794 ms |
6796 KB |
Output is correct |
2 |
Correct |
771 ms |
6732 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1048 ms |
7700 KB |
Output is correct |
2 |
Execution timed out |
5078 ms |
6648 KB |
Time limit exceeded |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1314 ms |
7768 KB |
Output is correct |
2 |
Execution timed out |
5037 ms |
7636 KB |
Time limit exceeded |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1549 ms |
7520 KB |
Output is correct |
2 |
Correct |
1447 ms |
7796 KB |
Output is correct |