# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
311620 | ly20 | Pipes (CEOI15_pipes) | C++17 | 1862 ms | 27084 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 112345;
vector <int> grafo[MAXN], id[MAXN];
int pai[MAXN], tam[MAXN], pai2[MAXN], tam2[MAXN];
vector <pair <int, int> > ar;
int low[MAXN], prof[MAXN], t, tp[MAXN];
vector <int> resp;
int find(int v) {
if(v == pai[v]) return v;
return pai[v] = find(pai[v]);
}
int find2(int v) {
if(v == pai2[v]) return v;
return pai2[v] = find2(pai2[v]);
}
void une(int a, int b) {
a = find(a); b = find(b);
if(a == b) return;
if(tam[a] > tam[b]) {
pai[b] = a;
tam[a] += tam[b];
}
else {
pai[a] = b;
tam[b] += tam[a];
}
}
void une2(int a, int b) {
a = find2(a); b = find2(b);
if(a == b) return;
if(tam2[a] > tam2[b]) {
pai2[b] = a;
tam2[a] += tam2[b];
}
else {
pai2[a] = b;
tam2[b] += tam2[a];
}
}
void dfs(int v, int p) {
tp[v] = ++t;
low[v] = tp[v];
for(int i = 0; i < grafo[v].size(); i++) {
int viz = grafo[v][i], at = id[v][i];
if(at == p) continue;
if(tp[viz] != 0) {
low[v] = min(low[v], tp[viz]);
}
else {
dfs(viz, at);
low[v] = min(low[v], low[viz]);
if(low[viz] > tp[v]) {
resp.push_back(at);
}
}
}
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++) {
pai[i] = i; tam[i] = 1; pai2[i] = i; tam2[i] = 1;
}
for(int i = 0; i < m; i++) {
int a, b;
scanf("%d %d", &a, &b);
if(find(a) == find(b)) {
une2(a, b);
continue;
}
une(a, b);
ar.push_back(make_pair(a, b));
}
//printf("\n\n");
for(int i = 0; i < ar.size(); i++) {
int a = find2(ar[i].first), b = find2(ar[i].second);
if(a == b) continue;
grafo[a].push_back(b); grafo[b].push_back(a);
id[a].push_back(i); id[b].push_back(i);
//printf("%d %d\n", ar[i].first, ar[i].second);
//printf("%d %d\n", a, b);
}
//printf("\n\n");
for(int i = 1; i <= n; i++) {
if(tp[i] == 0) dfs(i, -1);
}
for(int i = 0; i < resp.size(); i++) printf("%d %d\n", ar[resp[i]].first, ar[resp[i]].second);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |