제출 #1243639

#제출 시각아이디문제언어결과실행 시간메모리
1243639chikien2009Stranded Far From Home (BOI22_island)C++20
0 / 100
459 ms589824 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]; inline DSU() { for (int i = 0; i < 2e5; ++i) { par[i] = i; sz[i] = 1; } } 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]; return 1; } } dsu; int n, m, a, b; vector<int> g[200000], comp[200000], temp; pair<int, int> s[200000]; long long val[200000], cur; 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(); temp = {s[i].second}; check[i] = true; cur = s[i].first; for (auto & j : g[s[i].second]) { if (check[j]) { adj.insert(dsu.Get(j)); } } for (auto & j : adj) { cur += val[j]; dsu.Combine(j, s[i].second); if (val[j] >= s[i].first) { if (comp[j].size() > temp.size()) { swap(comp[j], temp); } for (auto & k : comp[j]) { temp.push_back(k); } } } val[dsu.Get(s[i].second)] = cur; comp[dsu.Get(s[i].second)] = temp; } fill_n(check, 2e5, 0); for (auto & i : comp[dsu.Get(s[n - 1].second)]) { 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...