답안 #54969

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
54969 2018-07-05T15:15:10 Z kdh9949 Pipes (CEOI15_pipes) C++17
0 / 100
5000 ms 6620 KB
#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){
    s[x] = y; d[x] = z;
    for(int i : e[x]) if(i != y) g(i, x, z + 1);
}

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);
            e[x].push_back(y); e[y].push_back(x);
            g(y, x, d[x] + 1);
            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:18: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:24: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 Execution timed out 5085 ms 2688 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5061 ms 2816 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5074 ms 2816 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 203 ms 3200 KB Output is correct
2 Execution timed out 5085 ms 3072 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5072 ms 3584 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5066 ms 5496 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5027 ms 5872 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5022 ms 6520 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5071 ms 6620 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5083 ms 6400 KB Time limit exceeded
2 Halted 0 ms 0 KB -