# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
100498 | 2019-03-11T19:32:26 Z | doowey | Pipes (CEOI15_pipes) | C++14 | 1208 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.fin(u) ==A.fin(v)){ if(B.fin(u) == B.fin(v)){ continue; } B.unite(u,v); } else{ A.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 | 4352 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 | 98 ms | 4572 KB | Output is correct |
2 | Incorrect | 99 ms | 4452 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 171 ms | 5344 KB | Wrong number of edges |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 298 ms | 6804 KB | Output is correct |
2 | Correct | 257 ms | 6352 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 452 ms | 11736 KB | Output is correct |
2 | Incorrect | 408 ms | 8272 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 622 ms | 12892 KB | Output is correct |
2 | Incorrect | 576 ms | 10036 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 795 ms | 14828 KB | Output is correct |
2 | Incorrect | 787 ms | 9992 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 995 ms | 14832 KB | Output is correct |
2 | Incorrect | 955 ms | 9992 KB | Wrong number of edges |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1208 ms | 14380 KB | Output is correct |
2 | Correct | 1141 ms | 11484 KB | Output is correct |