Submission #1239977

#TimeUsernameProblemLanguageResultExecution timeMemory
1239977The_SamuraiIsland Hopping (JOI24_island)C++20
2 / 100
3 ms428 KiB
#include "island.h" #include "bits/stdc++.h" using namespace std; #define ff first #define ss second struct dsu { vector<int> p, size; void init(int n) { p.assign(n + 1, 0); size.assign(n + 1, 0); for (int i = 0; i <= n; i++) p[i] = i; } int get(int a) { return p[a] == a ? a : p[a] = get(p[a]); } void merge(int a, int b) { a = get(a); b = get(b); if (a == b) return; if (size[a] > size[b]) swap(a, b); size[b] += size[a]; p[a] = b; } }; void solve(int n, int L) { vector<vector<int>> g(n + 1); dsu ds; ds.init(n + 1); queue<pair<int, int>> q; for (int i = 1; i <= n; i++) q.emplace(i, 1); int tot = 0; while (!q.empty()) { auto [u, i] = q.front(); q.pop(); if (i == n) continue; int v = query(u, i); if (count(g[u].begin(), g[u].end(), v)) { q.emplace(u, i + 1); continue; } if (ds.get(u) == ds.get(v)) continue; tot++; assert(tot <= n - 1); ds.merge(u, v); g[u].emplace_back(v); g[v].emplace_back(u); q.emplace(u, i + 1); } for (int i = 1; i <= n; i++) for (int j: g[i]) { if (i > j) { // cout << i << ' ' << j << endl; answer(i, j); } } }
#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...