Submission #1178196

#TimeUsernameProblemLanguageResultExecution timeMemory
1178196nguyenkhangninh99Power Plant (JOI20_power)C++17
100 / 100
82 ms28104 KiB

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int maxn = 2e5 + 5;

vector<int> g[maxn];
int dp[maxn], ans;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
string s; 

void dfs(int u, int pre){
    int mx = 0;
    for(int v: g[u]){
        if(v == pre) continue;
        dfs(v, u);
        dp[u] += dp[v]; 
        mx = max(mx, dp[v]);
    }

    if(s[u - 1] == '1') dp[u] = max(dp[u] - 1, 1ll);
    ans = max({ans, dp[u], mx + (s[u - 1] == '1')});
}


void solve(){
    int n; cin >> n;

    for(int i = 1; i <= n - 1; i++){
        int u, v; cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    cin >> s;

    dfs(rng() % n + 1, 0);

    cout << ans;

}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...