제출 #1323066

#제출 시각아이디문제언어결과실행 시간메모리
1323066simona1230Stranded Far From Home (BOI22_island)C++17
0 / 100
450 ms30272 KiB
#include<bits/stdc++.h>
using namespace std;

int n,m;
pair<int,int> a[200001];
vector<int> v[200001];
int b[200001];
void read()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].first;
        a[i].second=i;
        b[i]=a[i].first;
    }

    for(int i=1;i<=m;i++)
    {
        int x,y;
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
}

int p[200001];

int f(int i)
{
    if(p[i]==i)return i;
    return f(p[i]);
}

void unite(int i,int j)
{
    i=f(i);
    j=f(j);
    if(i==j)return;
    p[j]=p[i];
}

vector<int> g[200001];
int in[200001];
void solve()
{
    for(int i=1;i<=n;i++)
        p[i]=i;
    sort(a+1,a+n+1);
    for(int h=1;h<=n;h++)
    {
        int i=a[h].second;
        for(int j=0;j<v[i].size();j++)
        {
            int nb=v[i][j];
            //cout<<i<<" ++ "<<nb<<endl;
            if(b[nb]<=b[i])unite(i,nb);
        }
    }

    for(int i=1;i<=n;i++)
    {
        if(i==p[i])continue;
        //cout<<i<<" - "<<p[i]<<endl;
        g[p[i]].push_back(i);
        in[i]++;
    }
}

int sz[200001];
void dfs(int i)
{
    sz[i]=b[i];
    for(int j=0;j<g[i].size();j++)
    {
        int nb=g[i][j];
        dfs(nb);
        sz[i]+=sz[nb];
    }
}

int ans[200001];

void dfsans(int i)
{
    for(int j=0;j<g[i].size();j++)
    {
        int nb=g[i][j];
        if(sz[nb]>=b[i])
        {
            ans[nb]=1;
            dfsans(nb);
        }
    }
}

int main()
{
    read();
    solve();
    int ver;
    for(int i=1;i<=n;i++)
    {
        //cout<<in[i]<<" ";
        if(in[i]==0)
        {
            ver=i;
        }
    }
    //cout<<endl;

    //cout<<"! "<<ver<<endl;

    dfs(ver);
    ans[ver]=1;
    dfsans(ver);

    for(int i=1;i<=n;i++)
        cout<<ans[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...