Submission #1173558

#TimeUsernameProblemLanguageResultExecution timeMemory
1173558Dan4LifePipes (CEOI15_pipes)C++20
100 / 100
549 ms14756 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define sz(a) (int)a.size() #define all(a) begin(a),end(a) using ll = long long; using ar2 = array<ll,2>; using vi = vector<int>; const int mxN = (int)1e5+10; const ll INF = (int)1e9; const ll MOD = (ll)1e6+7; template<int SZ> struct Dsu{ int p[SZ], sz[SZ]; void init(int n=SZ-1){ for(int i = 1; i <= n; i++) p[i]=i,sz[i]=1; } int findSet(int i){return i==p[i]?i:p[i]=findSet(p[i]);} bool isSameSet(int i, int j){ return findSet(i)==findSet(j); } void unionSet(int i, int j){ int x = findSet(i), y = findSet(j); if(x==y) return; if(sz[x]<sz[y])swap(x,y); p[y] = x, sz[x]+=sz[y]; } }; Dsu<mxN> dsu, dsu2; int n, m, dfs_tim; vi adj[mxN]; int low[mxN], st[mxN]; void dfs(int s, int p){ st[s]=low[s]=++dfs_tim; bool par = 0; for(auto u : adj[s]){ if(u==p and !par){ par=1; continue;} if(!st[u]){ dfs(u,s); low[s] = min(low[s], low[u]); if(low[u] > st[s]) cout << s << " " << u << "\n"; } else low[s]=min(low[s],st[u]); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m; dsu.init(n), dsu2.init(n); for(int i = 0; i < m; i++){ int a, b,ok=0; cin >> a >> b; if(dsu.isSameSet(a,b)){ if(!dsu2.isSameSet(a,b)) dsu2.unionSet(a,b),ok=1; } else dsu.unionSet(a,b),ok=1; if(!ok) continue; adj[a].pb(b), adj[b].pb(a); } for(int i = 1; i <= n; i++){ if(st[i]) continue; dfs_tim = 0; 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...