# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
46925 | HachikujiMayoi | Pipes (CEOI15_pipes) | C++14 | 5016 ms | 18976 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, m;
int dep[N], par[N], dp[N][18], S[N], vis[N];
vector <int> g[N];
set <int> blocked;
int Get(int a){
if(par[a] == a) return a;
return par[a] = Get(par[a]);
}
void dfs(int at, int pr){
dp[at][0] = pr;
vis[at] = 1;
for(int i = 1; i <= 17; ++i) dp[at][i] = dp[ dp[at][i - 1] ][ i - 1 ];
for(auto i : g[at]){
if(i == pr) continue;
dep[i] = dep[at] + 1;
dfs(i, at);
}
}
int lca(int a, int b){
if(dep[a] > dep[b]) swap(a, b);
for(int i = 17; i >= 0; --i){
if(dep[b] - (1 << i) >= dep[a]){
a = dp[a][i];
}
}
if(a == b) return a;
for(int i = 17; i >= 0; --i){
if(dp[a][i] != dp[b][i]){
a = dp[a][i];
b = dp[b][i];
}
}
return dp[a][0];
}
void solve(int at, int pr){
vis[at] = 1;
for(auto i : g[at]){
if(i == pr) continue;
solve(i, at);
S[at] += S[i];
}
if(S[at] == 0 && pr){
printf("%d %d\n", at, pr);
}
}
int main(){
int x, y;
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++i) par[i] = i;
for(int i = 1; i <= m; ++i){
scanf("%d %d", &x, &y);
if(Get(x) == Get(y)) continue;
g[x].push_back(y);
g[y].push_back(x);
x = Get(x);
y = Get(y);
par[x] = y;
blocked.insert(i);
}
for(int i = 1; i <= n; ++i){
if(!vis[i]){
dfs(i, 0);
}
}
rewind(stdin);
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; ++i){
scanf("%d %d", &x, &y);
if(blocked.find(i) != blocked.end()) continue;
int lc = lca(x, y);
S[lc] -= 2;
S[x] += 1;
S[y] += 1;
}
memset(vis, 0, sizeof(vis));
for(int i = 1; i <= n; ++i){
if(!vis[i]){
solve(i, 0);
}
}
return 0;
}
Compilation message (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... |