Submission #810986

#TimeUsernameProblemLanguageResultExecution timeMemory
810986owoovoStranded Far From Home (BOI22_island)C++14
15 / 100
357 ms524288 KiB
#include<bits/stdc++.h> #define ll long long using namespace std; ll n,m,tag[200010],subsum[200010],dsu[200010],ans[200010]; vector<ll> e[200010],te[200010]; pair<ll,ll> val[200010]; int f(int a){ if(dsu[a]!=a){ dsu[a]=f(dsu[a]); return dsu[a]; }else{ return a; } } void dfs(int now,int x){ tag[now]==1?ans[now]=0:ans[now]=x; for(auto ne:te[now]){ dfs(ne,ans[now]); } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ cin>>val[i].first; val[i].second=i; dsu[i]=i; subsum[i]=val[i].first; } for(int i=0;i<m;i++){ int a,b; cin>>a>>b; if(val[a].first>val[b].first)e[a].push_back(b); else e[b].push_back(a); } sort(&val[1],&val[n+1]); for(int i=1;i<=n;i++){ ll x=val[i].second; ll y=val[i].first; for(auto ne:e[x]){ ne=f(ne); if(ne==x)continue; te[x].push_back(ne); if(subsum[ne]<y)tag[ne]=1; dsu[ne]=x; subsum[x]+=subsum[ne]; } } dfs(val[n].second,1); for(int i=1;i<=n;i++)cout<<ans[i]; cout<<"\n"; 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...