Submission #1178433

#TimeUsernameProblemLanguageResultExecution timeMemory
1178433kl0989eStranded Far From Home (BOI22_island)C++20
100 / 100
355 ms74176 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pi pair<int, int> #define pl pair<ll, ll> #define vi vector<int> #define vl vector<ll> #define fi first #define se second #define pb push_back #define all(x) (x).begin(),(x).end() const int maxn=2e5+10; vector<set<int>> ok(maxn); vector<vi> graph(maxn); vl sums(maxn,0); vl vals(maxn,0); vi head(maxn); int get(int a) { return (a==head[a]?a:head[a]=get(head[a])); } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); iota(all(head),0); int n,m; cin >> n >> m; for (int i=0; i<n; i++) { cin >> sums[i]; vals[i]=sums[i]; ok[i].insert(i); } int a,b; for (int i=0; i<m; i++) { cin >> a >> b; graph[--a].pb(--b); graph[b].pb(a); } vi ord(n); iota(all(ord),0); sort(all(ord),[&](int a, int b){return sums[a]<sums[b];}); for (int i=0; i<n; i++) { for (auto to:graph[ord[i]]) { if (vals[to]>vals[ord[i]]) { continue; } int a=get(to); int b=get(ord[i]); if (a==b) { continue; } if (sums[a]<vals[ord[i]]) { ok[a].clear(); } sums[b]+=sums[a]; head[a]=b; if (ok[b].size()<ok[a].size()) { swap(ok[a],ok[b]); } for (auto add:ok[a]) { ok[b].insert(add); } } } int rt=get(0); for (int i=0; i<n; i++) { cout << ok[rt].count(i); } cout << '\n'; }
#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...