Submission #540700

#TimeUsernameProblemLanguageResultExecution timeMemory
540700Vladth11Pipes (CEOI15_pipes)C++14
100 / 100
1058 ms12944 KiB
#include <bits/stdc++.h> #pragma GCC optimize("Ofast") #define debug(x) cerr << #x << " " << x << "\n" #define debugs(x) cerr << #x << " " << x << " " using namespace std; typedef long long ll; typedef pair <int, int> pii; typedef pair <long double, pii> muchie; const ll NMAX = 100001; const ll VMAX = 1000001; const ll INF = (1LL << 60); const ll MOD = 1000000007; const ll BLOCK = 1000000; const ll nr_of_bits = 16; vector <int> v[NMAX]; int root; int lvl[NMAX]; int parent[NMAX]; int parentB[NMAX]; int findR(int a){ if(parent[a] == a) return a; return parent[a] = findR(parent[a]); } int findRB(int a){ if(parentB[a] == a) return a; return parentB[a] = findRB(parentB[a]); } void unite(int a, int b){ a = findR(a); b = findR(b); parent[a] = b; } void uniteB(int a, int b){ a = findRB(a); b = findRB(b); parentB[a] = b; } int dp[NMAX]; void DFS(int node, int p){ lvl[node] = lvl[p] + 1; for(auto x : v[node]){ if(lvl[x] == 0){ DFS(x, node); }else if(lvl[x] > lvl[node]){ dp[node]--; }else{ dp[node]++; } } if(node != root){ dp[node]--; } dp[p] += dp[node]; if(dp[node] == 0 && node != root){ cout << node << " " << p << "\n"; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m, i; cin >> n >> m; for(i = 1; i <= n; i++){ parent[i] = i; parentB[i] = i; } for(i = 1; i <= m; i++){ int a, b; cin >> a >> b; if(findR(a) != findR(b)){ v[a].push_back(b); v[b].push_back(a); unite(a, b); }else if(findRB(a) != findRB(b)){ v[a].push_back(b); v[b].push_back(a); uniteB(a, b); } } for(i = 1; i <= n; i++){ if(!lvl[i]){ root = i; DFS(root, 0); } } 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...