# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
54785 |
2018-07-05T05:30:24 Z |
1등은 나의 것^^(#2059) |
Pipes (CEOI15_pipes) |
C++11 |
|
1527 ms |
8600 KB |
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int N = 100005, L = 17;
int n, m, p[3][N], par[N], dep[N];
bool vis[N], head[N];
vector<int> adj[N];
vector<pii> edg;
int Find (int T, int I) {
if(p[T][I] == I) return I;
return p[T][I] = Find(T, p[T][I]);
}
void calc (int C, int P) {
vis[C] = true;
par[C] = P;
dep[C] = dep[P] + 1;
for(auto &T : adj[C]) {
if(T == P) continue;
calc(T, C);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) {
p[0][i] = p[1][i] = p[2][i] = i;
}
for(int i=1;i<=m;i++) {
int A, B;
scanf("%d%d",&A,&B);
if(Find(0, A) != Find(0, B)) {
p[0][Find(0, A)] = B;
adj[A].push_back(B);
adj[B].push_back(A);
}
else if(Find(1, A) != Find(1, B)) {
p[1][Find(1, A)] = B;
edg.push_back({A, B});
}
}
for(int i=1;i<=n;i++) {
if(!vis[i]) {
head[i] = true;
calc(i, 0);
}
}
for(auto &T : edg) {
int A, B;
tie(A, B) = T;
while(true) {
int X = Find(2, A);
int Y = Find(2, B);
if(X == Y) break;
if(dep[X] < dep[Y]) swap(X, Y);
p[2][X] = par[X];
}
}
for(int i=1;i<=n;i++) {
if(!head[i] && Find(2, i) == i) {
printf("%d %d\n", i, par[i]);
}
}
}
Compilation message
pipes.cpp: In function 'int main()':
pipes.cpp:30: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:36: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 |
3 ms |
2688 KB |
Output is correct |
2 |
Correct |
4 ms |
2688 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
3072 KB |
Output is correct |
2 |
Correct |
8 ms |
2944 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
113 ms |
2944 KB |
Output is correct |
2 |
Correct |
112 ms |
2916 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
197 ms |
3296 KB |
Output is correct |
2 |
Correct |
239 ms |
3320 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
330 ms |
4076 KB |
Output is correct |
2 |
Correct |
277 ms |
4344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
462 ms |
6820 KB |
Output is correct |
2 |
Correct |
420 ms |
6888 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
757 ms |
7508 KB |
Output is correct |
2 |
Correct |
727 ms |
7280 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1055 ms |
8580 KB |
Output is correct |
2 |
Correct |
921 ms |
8600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1226 ms |
8576 KB |
Output is correct |
2 |
Correct |
1181 ms |
8592 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1527 ms |
8332 KB |
Output is correct |
2 |
Correct |
1402 ms |
8324 KB |
Output is correct |