Submission #1243649

#TimeUsernameProblemLanguageResultExecution timeMemory
1243649chikien2009Stranded Far From Home (BOI22_island)C++20
100 / 100
145 ms37512 KiB
#include <bits/stdc++.h> using namespace std; void setup() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } struct DSU { int par[200000], sz[200000]; long long val[200000]; vector<int> v[200000]; inline DSU() { for (int i = 0; i < 2e5; ++i) { par[i] = i; sz[i] = 1; val[i] = 0; } } inline int Get(int inp) { return (inp == par[inp] ? inp : par[inp] = Get(par[inp])); } inline bool Combine(int ina, int inb) { ina = Get(ina); inb = Get(inb); if (ina == inb) { return 0; } if (sz[ina] < sz[inb]) { swap(ina, inb); } par[inb] = ina; sz[ina] += sz[inb]; val[ina] += val[inb]; for (auto &i : v[inb]) { v[ina].push_back(i); } v[inb].clear(); return 1; } } dsu; int n, m, a, b; vector<int> g[200000]; pair<int, int> s[200000]; bool check[200000]; set<int> adj; int main() { setup(); cin >> n >> m; for (int i = 0; i < n; ++i) { cin >> s[i].first; s[i].second = i; } while (m--) { cin >> a >> b; g[a - 1].push_back(b - 1); g[b - 1].push_back(a - 1); } sort(s, s + n); for (int i = 0; i < n; ++i) { adj.clear(); a = s[i].second; b = s[i].first; dsu.val[a] = b; dsu.v[a] = {a}; check[s[i].second] = true; for (auto &j : g[a]) { if (check[j]) { adj.insert(dsu.Get(j)); } } for (auto &j : adj) { if (dsu.val[j] < b) { dsu.v[j].clear(); } dsu.Combine(j, a); } } a = dsu.Get(0); fill_n(check, 2e5, 0); for (auto & i : dsu.v[a]) { check[i] = true; } for (int i = 0; i < n; ++i) { cout << check[i]; } 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...