제출 #930995

#제출 시각아이디문제언어결과실행 시간메모리
930995Darren0724Stranded Far From Home (BOI22_island)C++17
0 / 100
167 ms60484 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define LCBorz ios_base::sync_with_stdio(false); cin.tie(0); #define all(x) x.begin(), x.end() const int N=200005; const int INF=1e18; const int mod=1e9+9; vector<int> pa(N,-1); int Find(int k){ return (pa[k]<0?k:pa[k]=Find(pa[k])); } void onion(int a,int b,vector<int> &pw){ a=Find(a),b=Find(b); if(a==b)return; pa[a]=b; pw[b]+=pw[a]; } void dfs(int k,int flag,vector<int> &can,vector<int> adj[]){ can[k]&=flag; for(int j:adj[k]){ dfs(j,can[k],can,adj); } } int32_t main() { LCBorz; int n,m;cin>>n>>m; vector<int> v(n+1),pw(n+1),t(n),use(n+1); vector<int> adj[n+1],can(n+1,1),g[n+1],ing(n+1); for(int i=1;i<=n;i++){ cin>>v[i];pw[i]=v[i]; } for(int i=0;i<m;i++){ int a,b;cin>>a>>b; adj[a].push_back(b); adj[b].push_back(a); } iota(all(t),1); sort(all(t),[&](int a,int b){return v[a]<v[b];}); for(int i:t){ for(int j:adj[i]){ if(!use[j])continue; int t=Find(j); //cout<<i<<' '<<t<<' '<<pw[t]<<' '<<v[i]<<endl; if(pw[t]<v[i])can[j]=0; if(!ing[t]){ ing[t]=1; g[i].push_back(t); } } for(int j:adj[i]){ if(use[j])onion(i,j,pw); } use[i]=1; } dfs(v[n-1],1,can,g); for(int i=1;i<=n;i++){ cout<<can[i]; } cout<<endl; 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...