#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[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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |