Submission #291509

#TimeUsernameProblemLanguageResultExecution timeMemory
291509davooddkareshkiPipes (CEOI15_pipes)C++17
90 / 100
1160 ms65536 KiB
#include<bits/stdc++.h> using namespace std; //#define int long long #define F first #define S second #define pii pair<int,int> #define mpr make_pair typedef long long ll; const int maxn = 1e5+1; //const int mod = 1e9+7; //const int inf = 1e9+10; int n, m, q; struct dsu { int par[maxn]; dsu() {memset(par, -1, sizeof par);} int get_par(int v) { if(par[v] < 0) return v; return par[v] = get_par(par[v]); } void merg(int u, int v) { u = get_par(u); v = get_par(v); if(u == v) return; if(par[u] < par[v]) swap(u,v); par[v] += par[u]; par[u] = v; } bool ask(int u, int v) {return (get_par(u) == get_par(v));} } G, T; /// G --> kole graph /// T --> molefe haye 2hamband yali graph vector<pii> g[maxn]; bitset<maxn> mark; int la[maxn]; void pfs(int v, int p = 0) { mark[v] = 1; for(auto e : g[v]) { int u = e.F; if(mark[u]) {la[v]++; la[u]--;} } for(auto e : g[v]) { int u = e.F; if(!mark[u]) pfs(u,v); } la[p]++; la[v]--; } vector<pii> edge; void dfs(int v, int id = -1) { mark[v] = 1; for(auto e : g[v]) { int u = e.F, ID = e.S; if(!mark[u]) { dfs(u,ID); la[v] += la[u]; } } if(la[v] == 0 && id >= 0) cout<< edge[id].F <<" "<< edge[id].S <<"\n"; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>> n >> m; for(int i = 1, u, v; i <= m; i++) { cin>> u >> v; if(!G.ask(u,v)) { G.merg(u,v); edge.push_back({u,v}); } else T.merg(u,v); } int i = 0; for(auto e : edge) { int u = T.get_par(e.F), v = T.get_par(e.S); g[u].push_back({v,i}); g[v].push_back({u,i}); i++; } for(int i = 1; i <= n; i++) if(!mark[i]) pfs(i); for(int i = 1; i <= n; i++) mark[i] = 0; for(int i = 1; i <= n; i++) if(!mark[i]) dfs(i); } /* 10 11 1 7 1 8 1 6 2 8 6 7 5 8 2 5 2 3 2 4 3 4 10 9 */
#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...