Submission #604178

#TimeUsernameProblemLanguageResultExecution timeMemory
604178DanerZeinStranded Far From Home (BOI22_island)C++14
10 / 100
1101 ms524288 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef pair<int,int> ii; const int MAX_N=2e5+10; vector<vi> G; int ha[MAX_N]; bool vis[MAX_N]; int n,m; void bfs(int u){ for(int i=0;i<n;i++) vis[i]=0; priority_queue<ii, vector<ii>, greater<ii> > q; vis[u]=1; ll co=ha[u]; for(auto &v:G[u]){ q.push(ii(ha[v],v)); } while(!q.empty()){ int x=q.top().second; q.pop(); if(co<ha[x]) continue; vis[x]=1; co+=ha[x]; for(auto &v:G[x]){ if(!vis[v]){ q.push(ii(ha[v],v)); } } } } int pa[MAX_N]; ll sb[MAX_N]; void dfs(int u,int p){ pa[u]=p; sb[u]=ha[u]; for(auto &v:G[u]){ if(v!=p){ dfs(v,u); sb[u]+=sb[v]; } } } int main(){ cin>>n>>m; G.resize(n+1); for(int i=0;i<n;i++) cin>>ha[i]; for(int i=0;i<m;i++){ int a,b; cin>>a>>b; a--; b--; G[a].push_back(b); G[b].push_back(a); } string ans="1"; dfs(0,0); for(int i=1;i<n;i++){ if(sb[i]>=ha[pa[i]] && ans[pa[i]]=='1') ans+='1'; else ans+='0'; } /*for(int i=0;i<n;i++){ bfs(i); bool all=1; for(int j=0;j<n;j++) all&=vis[j]; if(all) ans+='1'; else ans+='0'; }*/ cout<<ans<<endl; }
#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...