Submission #747164

#TimeUsernameProblemLanguageResultExecution timeMemory
747164DenkataStranded Far From Home (BOI22_island)C++14
100 / 100
299 ms61816 KiB
#include<bits/stdc++.h> #define endl '\n' using namespace std; const int maxn = 2e5+3; long long i,j,p,q,n,m,k; vector <long long> s[maxn]; long long par[maxn],num[maxn],sum[maxn]; vector <long long> v[maxn]; vector <pair<long long,long long>> g[maxn]; pair <long long,long long> obh[maxn]; bool covered[maxn]; int Find(int p) { if(par[p]==p) return p; return Find(par[p]); } void Union(int p,int q) { p = Find(p); q = Find(q); if(p==q) return ; if(s[p].size()<s[q].size()) swap(p,q); par[q] = p; sum[p] += sum[q]; for(auto jj:s[q]) s[p].push_back(jj); //s[q].clear();//reserve } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n>>m; vector <char> c(n); for(i=1;i<=n;i++) { cin>>num[i]; obh[i] = {num[i],i}; } sort(obh+1,obh+n+1); for(i=1;i<=m;i++) { cin>>p>>q; g[p].push_back({num[q],q}); g[q].push_back({num[p],p}); } for(i=1;i<=n;i++) { if(g[i].empty()) continue; sort(g[i].begin(),g[i].end()); for(auto j:g[i]) v[i].push_back(j.second); } for(i=1;i<=n;i++) { par[i] = i; sum[i] = num[i]; s[i].push_back(i); } for(i=1;i<=n;i++) { p = obh[i].second; covered[p] = true; k = Find(p); for(auto j:v[p]) { int pp = Find(j); if(pp==k || num[j]>num[p])continue; // cout<<j<<endl; if(num[p]>sum[pp]) { s[pp].clear(); } Union(k,pp); } } p = Find(1); for(i=0;i<n;i++) c[i] = '0'; for(auto i:s[p]) c[i-1] = '1'; for(auto i:c) cout<<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...