Submission #603243

#TimeUsernameProblemLanguageResultExecution timeMemory
603243CSQ31Stranded Far From Home (BOI22_island)C++17
100 / 100
178 ms30804 KiB
#include <bits/stdc++.h> using namespace std; #define sz(a) (int)(a.size()) #define all(a) a.begin(),a.end() #define pb push_back #define owo ios_base::sync_with_stdio(0);cin.tie(0); typedef long long int ll; const int MAXN = 2e5+5; int s[MAXN],par[MAXN]; ll sum[MAXN]; vector<int>adj[MAXN],g[MAXN]; bool good[MAXN]; int find(int x){ if(x==par[x])return x; return par[x] = find(par[x]); } int main() { owo int n,m; cin>>n>>m; for(int i=0;i<n;i++)cin>>s[i]; vector<array<int,3>>e; for(int i=0;i<m;i++){ int a,b; cin>>a>>b; a--; b--; if(s[a] > s[b])swap(a,b); e.pb({s[b],a,b}); } for(int i=0;i<n;i++){ par[i] = i; sum[i] = s[i]; good[i] = 1; g[i].pb(i); } sort(all(e)); for(auto x:e){ int v = x[1]; int u = x[2]; if(find(v) == find(u))continue; if(sum[par[v]] < s[u]){ for(int x:g[par[v]])good[x] = 0; g[par[v]].clear(); } v = find(v); u = find(u); if(sz(g[v]) > sz(g[u]))swap(v,u); sum[u]+=sum[v]; for(int x:g[v])g[u].pb(x); par[v] = u; } for(int i=0;i<n;i++)cout<<good[i]; }
#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...