# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
54824 |
2018-07-05T07:44:59 Z |
김세빈(#1509) |
Pipes (CEOI15_pipes) |
C++11 |
|
1311 ms |
3932 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(R[a] == R[b]){
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);
~~~~~^~~~~~~~~~~~~~~~
pipes.cpp:91:9: warning: 'c' may be used uninitialized in this function [-Wmaybe-uninitialized]
K[c] -= 2;
~~~~~^~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
2688 KB |
Wrong number of edges |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
6 ms |
2788 KB |
Wrong number of edges |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
113 ms |
2796 KB |
Output is correct |
2 |
Incorrect |
109 ms |
2688 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
190 ms |
2816 KB |
Output is correct |
2 |
Incorrect |
223 ms |
2864 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
312 ms |
3028 KB |
Output is correct |
2 |
Incorrect |
258 ms |
3072 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
383 ms |
3568 KB |
Output is correct |
2 |
Incorrect |
347 ms |
3572 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
662 ms |
3700 KB |
Output is correct |
2 |
Incorrect |
638 ms |
3684 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
842 ms |
3932 KB |
Output is correct |
2 |
Incorrect |
836 ms |
3916 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1146 ms |
3908 KB |
Output is correct |
2 |
Incorrect |
1047 ms |
3924 KB |
Wrong number of edges |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1311 ms |
3840 KB |
Output is correct |
2 |
Incorrect |
1255 ms |
3916 KB |
Wrong number of edges |