제출 #1202486

#제출 시각아이디문제언어결과실행 시간메모리
1202486AiperiiiStranded Far From Home (BOI22_island)C++20
20 / 100
1029 ms589824 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(),x.end() #define ff first #define ss second #define pb push_back const int N=2e5+5; vector <int> g[N]; int sum[N],a[N],ok[N]; void s(int v,int p){ sum[v]=a[v]; for(auto to : g[v]){ if(to!=p){ s(to,v); } } sum[p]+=sum[v]; } void dfs(int v,int p){ for(auto to : g[v]){ if(to!=p){ if(sum[to]>=a[v]){ ok[to]=1; dfs(to,v); } } } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; } while(m--){ int u,v; cin>>u>>v; g[u].pb(v); g[v].pb(u); } if(n<=2000 && m<=2000){ for(int i=1;i<=n;i++){ set <pair <int,int> > st; int sum=0; st.insert({0,i}); vector <int> vis(n+1); while(!st.empty()){ int v=st.begin()->ss; int x=a[v]; //cout<<v<<" "<<x<<"\n"; st.erase(st.begin()); if(x<=sum or (v==i && !vis[v])){ sum+=x; vis[v]=1; for(auto to : g[v]){ if(!vis[to]){ st.insert({a[to],to}); } } } else{ break; } } bool ok=1; for(int j=1;j<=n;j++){ if(!vis[j]){ ok=0;break; } } if(ok)cout<<1; else cout<<0; } cout<<"\n"; return 0; } s(1,0); ok[1]=1; dfs(1,0); for(int i=1;i<=n;i++)cout<<ok[i]; cout<<"\n"; } /* 4 4 2 2 4 3 1 2 1 3 2 3 3 4 4 3 4 2 2 1 1 2 3 2 4 1 10 9 10 9 8 7 4 4 3 2 1 1 1 2 1 3 2 4 3 5 5 7 5 8 7 9 8 10 3 6 1110101000 */
#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...