This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define TASKNAME "codeforce"
#define pb push_back
#define pli pair<int,int>
#define fi first
#define se second
#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL);
using namespace std;
using ll=long long;
const ll maxN=2e5+10;
const ll inf=1e18;
const ll mod=1e9+7;
ll lab[maxN];
ll sum[maxN];
ll findset(ll x)
{
return lab[x]<0?x:lab[x]=findset(lab[x]);
}
vector<ll>vec[maxN];
void unite(ll u,ll v,ll w)
{
u=findset(u);
v=findset(v);
if(u==v) return;
if(lab[u]>lab[v]) swap(u,v);
if(sum[u]<w)
{
if(sum[v]<w)
{
vec[u].clear();
}
else
{
swap(vec[u],vec[v]);
}
vec[v].clear();
}
else
{
if(sum[v]>=w)
{
for(auto zz:vec[v]) vec[u].pb(zz);
}
vec[v].clear();
}
sum[u]+=sum[v];
lab[u]+=lab[v];
lab[v]=u;
}
ll n,m,ans[maxN],a[maxN];
struct edge
{
ll u,v,w;
bool operator<(const edge&o)
{
return w<o.w;
}
}e[maxN];
void solve()
{
cin >> n >> m;
for(int i=1;i<=n;i++) cin >> a[i],vec[i].pb(i),ans[i]=0,sum[i]=a[i],lab[i]=-1;
for(int i=1;i<=m;i++)
{
cin >> e[i].u >> e[i].v;
e[i].w=max(a[e[i].u],a[e[i].v]);
}
sort(e+1,e+m+1);
for(int i=1;i<=m;i++)
{
unite(e[i].u,e[i].v,e[i].w);
}
ll x=findset(1);
for(auto zz:vec[x])
{
ans[zz]=1;
}
for(int i=1;i<=n;i++) cout << ans[i];
}
int main()
{
fastio
//freopen(TASKNAME".INP","r",stdin);
//freopen(TASKNAME".OUT","w",stdout);
solve();
}
# | 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... |