제출 #1201204

#제출 시각아이디문제언어결과실행 시간메모리
1201204Error42Pipes (CEOI15_pipes)C++20
0 / 100
5095 ms1600 KiB
#include <cassert> #include <iostream> #include <numeric> #include <vector> using namespace std; int const MAX_N = 1e5; // 2 * MAX_N * 4 B = 0.8 MB namespace dsu { int parent[MAX_N]; void init() { iota(parent, parent + MAX_N, 0); } int find(int const x) { if (parent[x] == x) return x; return parent[x] = find(parent[x]); } } // -1 if none int parent[MAX_N]; int sz[MAX_N]; int& up(int const v) { return parent[dsu::find(v)]; } int root(int v) { while (true) { int const p = up(v); if (p == -1) return v; v = p; } } void reroot(int v) { while (parent[v] != -1) { int const p = parent[v]; sz[p] -= sz[v]; swap(parent[v], parent[p]); sz[v] += sz[p]; } } void add_edge(int u, int v) { int ru = root(u); int rv = root(v); if (ru != rv) { if (sz[ru] < sz[rv]) { swap(u, v); swap(ru, rv); } reroot(v); parent[v] = u; do { sz[u] += sz[v]; u = up(u); } while (u != -1); } else { int cu = u; int cv = v; while (cu != cv) { #ifdef _DEBUG assert(cu != -1 && cv != -1); #endif int& c = sz[cu] < sz[cv] ? cu : cv; int& pc = up(c); dsu::parent[dsu::find(c)] = pc; c = pc; pc = -1; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; dsu::init(); fill(sz, sz + MAX_N, 1); fill(parent, parent + MAX_N, -1); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; u--; v--; add_edge(u, v); } for (int i = 0; i < n; i++) if (parent[i] != -1) cout << i + 1 << " " << parent[i] + 1 << "\n"; }
#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...