Submission #1323073

#TimeUsernameProblemLanguageResultExecution timeMemory
1323073NValchanovStranded Far From Home (BOI22_island)C++20
0 / 100
197 ms25480 KiB
#include <iostream>
#include <vector>
#include <cassert>

using namespace std;

const int MAXN = 2e5 + 10;

int n, m;
int c[MAXN];
int sz[MAXN];
bool ans[MAXN];
vector < int > adj[MAXN];

void read()
{
    cin >> n >> m;

    assert(m == n - 1);

    for(int i = 1; i <= n; i++)
    {
        cin >> c[i];
    }

    for(int i = 1; i <= m; i++)
    {
        int u, v;
        cin >> u >> v;

        adj[u].push_back(v);
        adj[v].push_back(u);
    }
}

void dfs1(int u, int par)
{
    sz[u] = c[u];

    for(int v : adj[u])
    {
        if(v == par)
            continue;

        dfs1(v, u);

        sz[u] += sz[v];
    }
}

void dfs2(int u, int par)
{
    if(par == u)
        ans[u] = true;
    else
    {
        if(sz[u] >= c[par])
            ans[u] |= ans[par];
    }

    for(int v : adj[u])
    {
        if(v == par)
            continue;

        dfs2(v, u);
    }
}

void solve()
{
    dfs1(1, 1);
    dfs2(1, 1);

    for(int i = 1; i <= n; i++)
    {
        cout << ans[i];
    }
    cout << endl;
}

int main()
{
    read();
    solve();

    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...