제출 #245342

#제출 시각아이디문제언어결과실행 시간메모리
245342lycPipes (CEOI15_pipes)C++14
0 / 100
1386 ms27256 KiB
#include <iostream> #include <vector> using namespace std; #define TRACE(x) cerr << #x << " :: " << x << endl #define _ << " " << #define SZ(x) (int)(x).size() #define ALL(x) (x).begin(),(x).end() #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define RFOR(i,a,b) for (int i=(a);i>=(b);--i) const int mxN = 1e5+5; int N, M; vector<int> al[mxN]; struct UFDS { int p[mxN], s[mxN]; UFDS() { FOR(i,1,N) p[i] = i, s[i] = 1; } int finds(int i) { return (p[i] == i) ? i : (p[i] = finds(p[i])); } bool unions(int i, int j) { int x = finds(i), y = finds(j); if (x == y) return 0; if (s[x] < s[y]) swap(x,y); p[y] = x, s[x] += s[y]; return 1; } }; int num[mxN], low[mxN], cnt; void dfs(int u, int p) { num[u] = low[u] = cnt++; for (int v : al[u]) { if (v == p) continue; else if (num[v] == -1) { dfs(v,u); low[u] = min(low[u],low[v]); if (low[v] > num[u]) cout << u << ' ' << v << '\n'; } else low[u] = min(low[u],num[v]); } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N >> M; UFDS UF[2]; FOR(i,1,M){ int U, V; cin >> U >> V; FOR(j,0,1){ if (UF[j].unions(U,V)) { al[U].push_back(V); al[V].push_back(U); break; } } } FOR(i,1,N) num[i] = -1; cnt = 0; FOR(i,1,N) if (num[i] == -1) dfs(i,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...