# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
54817 |
2018-07-05T07:17:52 Z |
김세빈(#1509) |
Pipes (CEOI15_pipes) |
C++11 |
|
4149 ms |
14204 KB |
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
vector <pii> T;
vector <int> V[101010];
int P[101010][17];
int R[101010], K[101010], D[101010], S[101010];
bool chk[101010];
int n, m;
int calc(int p, int r)
{
int ret = K[p];
K[p] = 0;
for(auto t: V[p]){
if(t != r) ret += calc(t, p);
}
if(ret > 0) chk[p] = 1;
return ret;
}
void reorder(int x, int p, int r, int f)
{
int i, c;
D[p] = D[r] + 1; R[p] = x;
c = P[p][0]; P[p][0] = r;
for(i=1;i<17;i++){
P[p][i] = P[P[p][i-1]][i-1];
}
for(auto t: V[p]){
if(t != r){
if(t == c) reorder(x, t, p, chk[p]);
else reorder(x, t, p, 0);
}
}
if(c == r) chk[p] = f;
}
int lca(int a, int b)
{
if(D[a] < D[b]) swap(a, b);
int i;
for(i=0;i<17;i++){
if(D[a] - D[b] & (1<<i)) a = P[a][i];
}
for(i=16;i>=0;i--){
if(P[a][i] != P[b][i]) a = P[a][i], b = P[b][i];
}
return a == b? a : P[a][0];
}
int main()
{
int i, a, b, c;
scanf("%d%d", &n, &m);
for(i=1;i<=n;i++){
S[i] = 1;
R[i] = i;
}
for(i=1;i<=m;i++){
scanf("%d%d", &a, &b);
c = lca(a, b);
if(c == 0){
if(S[R[a]] > S[R[b]]) swap(a, b);
calc(R[a], 0);
V[a].push_back(b);
V[b].push_back(a);
S[R[b]] += S[R[a]];
reorder(R[b], a, b, 0);
}
else{
K[c] -= 2;
K[a] ++, K[b] ++;
}
}
for(i=1;i<=n;i++){
if(R[i] == i) calc(R[i], 0);
}
for(i=1;i<=n;i++){
if(R[i] != i && !chk[i]) printf("%d %d\n", i, P[i][0]);
}
return 0;
}
Compilation message
pipes.cpp: In function 'int lca(int, int)':
pipes.cpp:56:11: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
if(D[a] - D[b] & (1<<i)) a = P[a][i];
~~~~~^~~~~~
pipes.cpp: In function 'int main()':
pipes.cpp:70:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &n, &m);
~~~~~^~~~~~~~~~~~~~~~
pipes.cpp:78:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &a, &b);
~~~~~^~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
2688 KB |
Output is correct |
2 |
Incorrect |
4 ms |
2816 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
3288 KB |
Output is correct |
2 |
Incorrect |
12 ms |
3200 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
208 ms |
3072 KB |
Output is correct |
2 |
Incorrect |
193 ms |
3072 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
378 ms |
3856 KB |
Output is correct |
2 |
Incorrect |
445 ms |
3960 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
793 ms |
5476 KB |
Output is correct |
2 |
Correct |
576 ms |
6320 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1270 ms |
10752 KB |
Output is correct |
2 |
Incorrect |
1081 ms |
10744 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2008 ms |
11944 KB |
Output is correct |
2 |
Correct |
1973 ms |
11856 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2986 ms |
14072 KB |
Output is correct |
2 |
Incorrect |
2797 ms |
14204 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3762 ms |
14204 KB |
Output is correct |
2 |
Incorrect |
3967 ms |
14148 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4149 ms |
13508 KB |
Output is correct |
2 |
Correct |
3282 ms |
14132 KB |
Output is correct |