Submission #527138

#TimeUsernameProblemLanguageResultExecution timeMemory
527138chicken337Pipes (CEOI15_pipes)C++14
10 / 100
981 ms25804 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 100005; int v, e, ID = 0; int num[MAXN], low[MAXN]; int p[2][MAXN], r[2][MAXN]; vector<int> adj[MAXN]; int root(int id, int x){ if(p[id][x] == x) return x; return p[id][x] = root(id, p[id][x]); } void connect(int id, int x, int y){ x = root(id, x), y = root(id, y); if(r[id][x] > r[id][y]) swap(x, y); p[id][x] = y; r[id][y] ++; } bool connected(int id, int x, int y){ x = root(id, x), y = root(id, y); return x == y; } void dfs(int x, int par){ num[x] = low[x] = ID ++; for(int nxt : adj[x]){ if(num[nxt] == -1){ dfs(nxt, x); if(num[x] < low[nxt]) cout << x+1 << ' ' << nxt+1 << '\n'; low[x] = min(low[x], low[nxt]); } else if(nxt != par){ low[x] = min(low[x], num[nxt]); } } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> v >> e; int a, b; for(int i = 0; i < v; i ++) p[0][i] = p[1][i] = i, r[0][i] = r[1][i] = 0, num[i] = low[i] = -1; for(int i = 0; i < e; i ++){ cin >> a >> b; if(!connected(0, a-1, b-1)){ adj[a-1].push_back(b-1); adj[b-1].push_back(a-1); connect(0, a-1, b-1); } else if(!connected(1, a-1, b-1)){ adj[a-1].push_back(b-1); adj[b-1].push_back(a-1); connect(1, a-1, b-1); } } for(int i = 0; i < v; i ++) if(num[i] == -1) dfs(i, -1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...