Submission #680459

#TimeUsernameProblemLanguageResultExecution timeMemory
680459danikoynovPipes (CEOI15_pipes)C++14
60 / 100
355 ms11220 KiB
/** ____ ____ ____ ____ ____ ____ ||l |||e |||i |||n |||a |||d || ||__|||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\|/__\| **/ #include<bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxn = 7e4 + 10; int n, m; int par1[maxn], par2[maxn]; int find_leader1(int v) { if (v == par1[v]) return v; return (par1[v] = find_leader1(par1[v])); } bool connected1(int v, int u) { v = find_leader1(v); u = find_leader1(u); if (v == u) return true; par1[u] = v; return false; } int find_leader2(int v) { if (v == par2[v]) return v; return (par2[v] = find_leader2(par2[v])); } bool connected2(int v, int u) { v = find_leader2(v); u = find_leader2(u); if (v == u) return true; par2[u] = v; return false; } vector < int > g[maxn]; int tin[maxn], low[maxn], timer; void dfs(int v, int p) { tin[v] = low[v] = ++ timer; ///cout << v << " : " << p << " " << g[v].size() << endl; bool tf = false; for (int u : g[v]) { if (u == p && !tf) { tf = true; continue; } if (tin[u] != 0) { low[v] = min(low[v], tin[u]); } else { dfs(u, v); if (low[u] > tin[v]) cout << v << " " << u << endl; low[v] = min(low[v], low[u]); } } } void solve() { cin >> n >> m; int v, u; for (int i = 1; i <= n; i ++) par1[i] = i, par2[i] = i; for (int i = 1; i <= m; i ++) { cin >> v >> u; if (connected1(v, u)) { if (!connected2(v, u)) { g[v].push_back(u); g[u].push_back(v); } } else { g[v].push_back(u); g[u].push_back(v); } } for (int i = 1; i <= n; i ++) if (tin[i] == 0) dfs(i, 0); } int main() { speed(); solve(); return 0; } /** 3 2 1 2 2 3 */
#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...