제출 #109983

#제출 시각아이디문제언어결과실행 시간메모리
109983someone_aaPipes (CEOI15_pipes)C++17
0 / 100
5067 ms7272 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define mp make_pair using namespace std; const int maxn = 100100; vector<int>g[maxn]; int n, m; int tin[maxn], low[maxn]; int uparent[maxn][2]; int usize[maxn][2]; int root(int x, int d) { while(x != uparent[x][d]) { x = uparent[x][d]; } return x; } void unite(int x, int y, int d) { x = root(x, d); y = root(y, d); if(x == y) return; uparent[x][d] = y; usize[y][d] += usize[x][d]; } int br; bool visited[maxn]; set<pair<int,int> > result; int timer; void dfs(int v, int p = -1) { visited[v] = true; tin[v] = low[v] = timer++; for (int to : g[v]) { if (to == p) continue; if (visited[to]) { low[v] = min(low[v], tin[to]); } else { dfs(to, v); low[v] = min(low[v], low[to]); if (low[to] > tin[v]) cout<<v+1<<" "<<to+1<<"\n"; } } } int main() { cin>>n>>m; int u, v; for(int i=0;i<n;i++) { usize[i][0] = usize[i][1] = 1; uparent[i][0] = uparent[i][1] = i; } for(int i=0;i<m;i++) { cin>>u>>v; u--; v--; if(root(u, 1) == root(v, 1)) continue; if(root(u,0) != root(v,0)) { unite(u, v, 0); g[u].pb(v); g[v].pb(u); } else { unite(u, v, 1); g[u].pb(v); g[v].pb(u); } } memset(tin,-1,sizeof(tin)); memset(low,-1,sizeof(low)); for(int i=0;i<n;i++) { if(!visited[i]) { dfs(i, -1); } } for(auto i:result) { cout<<i.first+1<<" "<<i.second+1<<"\n"; } return 0; }
#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...