#include "bits/stdc++.h"
#define FOR(i,a,b)for(int i=(a);i<(b);i++)
#define F0R(i,a)FOR(i,0,a)
#define ROF(i,a,b)for(int i=(b)-1;i>=(a);i--)
#define R0F(i,a)ROF(i,0,a)
#define REP(a)F0R(_,a)
using namespace std;
const int mxn=2e5+20;
vector<int> aj[mxn];
bool mark[mxn];
int s[mxn];
struct{
long long val[mxn];
int ar[mxn];
void init(int n){
fill_n(ar,n,-1);
F0R(i,n)val[i]=s[i];
}
int find(int u){
if(ar[u]<0)return u;
else return ar[u]=find(ar[u]);
}
void unite(int u,int v){
v=find(v);
if(s[u]>val[v]){
mark[v]=true;
return;
}
u=find(u);
if(u==v)return;
if(ar[u]>ar[v])swap(u,v);
val[u]+=val[v],ar[u]+=ar[v],ar[v]=u;
}
}DSU;
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
int n,m;cin>>n>>m;
F0R(i,n)cin>>s[i];
DSU.init(n);
REP(m){
int a,b;cin>>a>>b;
a--,b--;
if(s[a]<s[b])swap(a,b);
aj[a].push_back(b);
}
vector<pair<int,int>>vp;
F0R(i,n)vp.emplace_back(s[i],i);
sort(begin(vp),end(vp));
for(auto&pr:vp){
int w=pr.first,u=pr.second;
for(int v:aj[u])DSU.unite(u,v);
}
F0R(i,n)cout<<(mark[DSU.find(i)]?0:1);cout<<'\n';
}
| # | 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... |