제출 #1320220

#제출 시각아이디문제언어결과실행 시간메모리
1320220wangzhiyi33Stranded Far From Home (BOI22_island)C++20
100 / 100
170 ms54704 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int maxn=2e5; int n,m; int dsu[maxn+2],sz[maxn+2],sum[maxn+2]; vector<int>nd[maxn+2]; int fin(int cur){ if(dsu[cur]==cur)return cur; return dsu[cur]=fin(dsu[cur]); } void merg(int a,int b){ a=fin(a),b=fin(b); if(a==b)return; if(sz[a]>sz[b])swap(a,b); sz[b]+=sz[a],dsu[a]=b; sum[b]+=sum[a]; for(auto x : nd[a]){ nd[b].push_back(x); } nd[a].clear(); } vector<int>adj[maxn+2]; bool ans[maxn+2]; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>m; pair<int,int>a[n+1]; int aa[n+1]; for(int q=1;q<=n;q++){ cin>>a[q].first; a[q].second=q; aa[q]=a[q].first; } for(int q=1;q<=m;q++){ int u,v; cin>>u>>v; adj[u].push_back(v); adj[v].push_back(u); } for(int q=1;q<=n;q++){ dsu[q]=q; sz[q]=1; sum[q]=a[q].first; nd[q].push_back(q); ans[q]=true; } sort(a+1,a+n+1); for(int q=1;q<=n;q++){ int hmm=a[q].second; for(auto x : adj[hmm]){ if(fin(x)==fin(hmm) || sum[fin(hmm)]<aa[x])continue; if(sum[fin(x)]<aa[hmm]){ //cout<<x<<" "<<hmm<<endl; for(auto y : nd[fin(x)]){ ans[y]=false; } } merg(x,hmm); } } for(int q=1;q<=n;q++){ if(ans[q]){ cout<<"1"; } else{ cout<<"0"; } } cout<<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...