Submission #850464

#TimeUsernameProblemLanguageResultExecution timeMemory
850464MinaRagy06Stranded Far From Home (BOI22_island)C++17
25 / 100
1049 ms524288 KiB
#include <bits/stdc++.h> using namespace std; typedef int64_t ll; const int N = 200'005; int par[N], sz[N], bad[N]; ll cnt[N], a[N]; vector<int> adj[N]; pair<int, int> find(int u) { if (par[u] == u) { return {u, bad[u]}; } pair<int, int> v = find(par[u]); bad[u] |= v.second; par[u] = v.first; return {par[u], bad[u]}; } void join(int u, int v) { u = find(u).first, v = find(v).first; if (u == v) return; par[v] = u, sz[u] += sz[v], cnt[u] += cnt[v]; for (auto nxt : adj[v]) { int x = find(nxt).first; if (x != u) { adj[u].push_back(x); } } adj[v].clear(); } int main() { ios_base::sync_with_stdio(0), cin.tie(0); int n, m; cin >> n >> m; for (int i = 0; i < n; i++) { par[i] = i, sz[i] = 1, bad[i] = 0; cin >> cnt[i]; a[i] = cnt[i]; } for (int i = 0, u, v; i < m; i++) { cin >> u >> v; u--, v--; adj[u].push_back(v); adj[v].push_back(u); } priority_queue<pair<ll, int>> pq; for (int i = 0; i < n; i++) { pq.push({-cnt[i], i}); } while (pq.size()) { int node = pq.top().second; ll val = -pq.top().first; pq.pop(); if (node != par[node]) { continue; } if (val != cnt[node]) { continue; } if (sz[node] == n) { continue; } int x = -1; for (auto nxt : adj[node]) { if (find(nxt).first != node && val >= a[nxt]) { x = find(nxt).first; break; } } if (x == -1) { bad[node] = 1; continue; } join(node, x); int New = find(node).first; pq.push({-cnt[New], New}); } for (int i = 0; i < n; i++) { cout << !find(i).second; } cout << '\n'; 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...