Submission #359346

#TimeUsernameProblemLanguageResultExecution timeMemory
359346eyangchPower Plant (JOI20_power)C++17
100 / 100
188 ms25452 KiB
#include <bits/stdc++.h>
#define endl "\n"

using namespace std;

int N;
vector<int> graph[200000];
char s[200001];
int ans = 0;

int dfs(int id, int par){
    int p = s[id] - '0', ret = p, c = 0, mxc = 0;
    for(int i : graph[id]){
        if(i == par) continue;
        int cur = dfs(i, id);
        if(cur == 0) continue;
        c++;
        mxc = max(mxc, cur);
        ret += cur;
    }
    if(p && c > 0){
        ans = (c-1 ? max({ans, ret-2, mxc+1}) : max(ans, ret));
        ret -= 2;
    }
    ans = max(ans, ret);
    return max(p, ret);
}

int32_t main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N;
    for(int i = 0; i < N-1; i++){
        int a, b; cin >> a >> b;
        graph[a-1].push_back(b-1);
        graph[b-1].push_back(a-1);
    }
    cin >> s;
    dfs(0, 0);
    cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...