# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
100497 | 2019-03-11T19:23:06 Z | doowey | Pipes (CEOI15_pipes) | C++14 | 1277 ms | 14832 KB |
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); const int N = (int)1e5 + 9; struct DSU{ int pi[N]; int sz[N]; int fin(int x){ if(pi[x] == x) return x; return pi[x] = fin(pi[x]); } bool unite(int a, int b){ a = fin(a); b = fin(b); if(a==b) return false; if(sz[a] > sz[b]) swap(a, b); sz[b] += sz[a]; pi[a] = b; return true; } void Init(){ for(int i = 0 ;i < N ; i ++ ){ pi[i] = i; sz[i] = 1; } } }; DSU A, B; vector<int> T[N]; vector<pii> answ; int tin[N]; int low[N]; int timer; bool vis[N]; void bridge(int a, int b){ if(a>b) swap(a, b); answ.push_back(mp(a,b)); } void dfs(int node, int par){ if(vis[node]){ return; } vis[node] = true; tin[node] = timer ++ ; low[node] = tin[node]; for(auto x : T[node]){ if(x == par){ continue; } if(vis[x]){ low[node] = min(low[node], tin[x]); } else{ dfs(x, node); low[node] = min(low[node], low[x]); if(tin[node] < low[x]){ bridge(node, x); } } } } int main(){ fastIO; A.Init(); B.Init(); int n, m; cin >> n >> m; int u, v; for(int i = 0 ; i < m ; i ++ ){ cin >> u >> v; if(A.unite(u, v)){ T[u].push_back(v); T[v].push_back(u); } else if(B.unite(u, v)){ T[u].push_back(v); T[v].push_back(u); } } for(int i = 1; i <= n; i ++ ) dfs(i,-1); bool ok; sort(answ.begin(), answ.end()); for(int i = 0 ;i < answ.size(); i ++ ){ cout << answ[i].fi << " " << answ[i].se << "\n"; } return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 4224 KB | Output is correct |
2 | Incorrect | 5 ms | 4224 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 8 ms | 4736 KB | Output is correct |
2 | Incorrect | 8 ms | 4480 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 102 ms | 4604 KB | Output is correct |
2 | Incorrect | 94 ms | 4444 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 158 ms | 5332 KB | Wrong number of edges |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 281 ms | 6796 KB | Output is correct |
2 | Correct | 253 ms | 6500 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 428 ms | 11784 KB | Output is correct |
2 | Incorrect | 335 ms | 8396 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 591 ms | 12936 KB | Output is correct |
2 | Incorrect | 550 ms | 9976 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 811 ms | 14832 KB | Output is correct |
2 | Incorrect | 815 ms | 10004 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1089 ms | 14828 KB | Output is correct |
2 | Incorrect | 1012 ms | 9996 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1277 ms | 14368 KB | Output is correct |
2 | Correct | 1110 ms | 11412 KB | Output is correct |