# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
246254 | 2020-07-08T12:49:42 Z | dantoh000 | Pipes (CEOI15_pipes) | C++14 | 2886 ms | 65536 KB |
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; const int N = 100005; int n,m; vector<int> G[N]; int p[N], d[N], sz[N], h[N], pos[N], S[N]; int ct = 0; void dfs(int u){ sz[u] = 1; for (auto v : G[u]){ if (p[v] == 0){ p[v] = u; d[v] = d[u]+1; dfs(v); sz[u] += sz[v]; } } } void decomp(int u){ pos[u] = ct++; //printf("%d %d\n",u,ct); int heavy = 0; for (auto v : G[u]){ if (p[v] != u) continue; if (sz[heavy] < sz[v]) heavy = v; } if (heavy == 0) return; h[heavy] = h[u]; decomp(heavy); for (auto v : G[u]){ if (p[v] != u) continue; if (v != heavy && v != p[u]) decomp(v); } } void up(int u, int v){ while (h[u] != h[v]){ if (u == -1 || v == -1) return; if (d[h[u]] > d[h[v]]) swap(u,v); //printf("updating %d to %d\n",v,h[v]); S[pos[h[v]]]++; S[pos[v]+1]--; v = p[h[v]]; } if (d[u] > d[v]) swap(u,v); S[pos[u]+1]++; S[pos[v]+1]--; } int main(){ scanf("%d%d",&n,&m); for (int i = 0; i < m; i++){ int u,v; scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u); } iota(h,h+N,0); for (int i = 1; i <= n; i++){ if (p[i] == 0){ p[i] = -1; dfs(i); decomp(i); } } for (int u = 1; u <= n; u++){ sort(G[u].begin(),G[u].end()); int last = -1; for (auto v : G[u]){ if (p[v] != u && p[u] != v || v == last) up(u,v); last = v; } } for (int i = 1; i <= n+1; i++){ S[i] += S[i-1]; } for (int i = 1; i <= n; i++){ //printf("edge<%d %d> = %d\n",i,p[i],S[pos[i]]); if (S[pos[i]] == 0 && p[i] != -1){ printf("%d %d\n",p[i],i); } } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 3072 KB | Output is correct |
2 | Incorrect | 7 ms | 3072 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 13 ms | 3712 KB | Output is correct |
2 | Correct | 12 ms | 3584 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 246 ms | 11768 KB | Output is correct |
2 | Incorrect | 237 ms | 15864 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 431 ms | 15108 KB | Output is correct |
2 | Runtime error | 504 ms | 30456 KB | Memory limit exceeded (if you are sure your verdict is not MLE, please contact us) |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 778 ms | 25840 KB | Memory limit exceeded (if you are sure your verdict is not MLE, please contact us) |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 1145 ms | 43232 KB | Memory limit exceeded (if you are sure your verdict is not MLE, please contact us) |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 1912 ms | 57428 KB | Memory limit exceeded (if you are sure your verdict is not MLE, please contact us) |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 2769 ms | 65536 KB | Memory limit exceeded (if you are sure your verdict is not MLE, please contact us) |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 2607 ms | 65536 KB | Execution killed with signal 9 (could be triggered by violating memory limits) |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 2886 ms | 65536 KB | Execution killed with signal 9 (could be triggered by violating memory limits) |
2 | Halted | 0 ms | 0 KB | - |