제출 #714791

#제출 시각아이디문제언어결과실행 시간메모리
714791ToxtaqStranded Far From Home (BOI22_island)C++17
10 / 100
1084 ms524288 KiB
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>>g;
vector<int>num;
vector<long long>cnt;
vector<int>canTraverse; /// 0-unchecked, 1-false, 2-true
void calc(int u, int par){
    cnt[u] = num[u];
    for(int v : g[u]){
        if(v != par){
            calc(v, u);
            cnt[u] += cnt[v];
        }
    }
}
void dfs(int u, int par){
    if(canTraverse[par] == 1)canTraverse[u] = 1;
    else{
        canTraverse[u] = (cnt[u] >= num[par]) + 1;
    }
    for(int v : g[u]){
        if(v != par){
            dfs(v, u);
        }
    }
}
int main()
{
    int n, m;
    cin >> n >> m;
    g.resize(n + 1);
    num.resize(n + 1);
    cnt.resize(n + 1);
    canTraverse.resize(n + 1);
    for(int i = 1;i <= n;++i)cin >> num[i];
    for(int i = 0;i < m;++i){
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    calc(1, 1);
    dfs(1, 1);
    for(int i = 1;i <= n;++i){
        if(canTraverse[i] == 2)cout << 1;
        else cout << 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...