Submission #74738

#TimeUsernameProblemLanguageResultExecution timeMemory
74738shoemakerjoPipes (CEOI15_pipes)C++14
100 / 100
1245 ms7180 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int, int> #define maxn 100010 int N, M; const int mod = 1000000007; ll nums[maxn]; vector<vector<int>> adj(maxn); int par[maxn]; int findset(int a) { if (par[a] == a) return a; return par[a] = findset(par[a]); } void unionset(int a, int b) { a = findset(a); b = findset(b); if (a == b) return; if (rand() % 2) { par[a] = b; } else par[b] = a; } bool vis[maxn]; void dfs(int u, int p) { vis[u] = true; for (int val : adj[u]) { if (val != p) { dfs(val, u); nums[u] += nums[val]; } } if (nums[u] == 0 && p != -1) { cout << u << " " << p << endl; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> N >> M; for (int i = 1; i <= N; i++) par[i] = i; srand(23); //want deterministic for now int x, y; while (M--) { cin >> x >> y; if (findset(x) != findset(y)) { adj[x].push_back(y); adj[y].push_back(x); unionset(x, y); } else { int cur = rand()%mod; nums[x] += cur + 0LL; nums[y] -= cur + 0LL; } } for (int i = 1; i <= N; i++) { if (!vis[i]) dfs(i, -1); } }
#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...