Submission #850470

#TimeUsernameProblemLanguageResultExecution timeMemory
850470MinaRagy06Stranded Far From Home (BOI22_island)C++17
25 / 100
1038 ms55748 KiB
#include <bits/stdc++.h> using namespace std; typedef int64_t ll; const int N = 200'005; int par[N], sz[N], bad[N], a[N]; ll cnt[N]; set<array<int, 3>> 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 [vnxt, nxt, src] : adj[v]) { int x = find(nxt).first; if (x != u) { adj[u].insert({a[nxt], nxt, src}); } else { adj[u].erase({a[src], src, nxt}); } } 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].insert({a[v], v, u}); adj[v].insert({a[u], u, v}); } 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 [vnxt, nxt, src] : adj[node]) { if (val >= vnxt) { 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...