Submission #1134086

#TimeUsernameProblemLanguageResultExecution timeMemory
1134086tuongllPower Plant (JOI20_power)C++20
100 / 100
95 ms26296 KiB
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <utility>
#include <cmath>
#include <ctime>
#include <cassert>
#include <set>
#include <stack>
#include <map>
#include <queue>
#include <random>
#include <chrono>
#include <bitset>
#include <array>
using ll = long long;
#define debug(x) cout << #x << " = " << x << '\n'
#define separator "===============================================\n"
#define all(a) a.begin(), a.end()
#define SZ(a) (int)(a).size()
using namespace std;
const int mxn = 2e5 + 3;
const ll  mod = 1e9 + 7;
const int inf32 = 2e9;
const ll  inf64 = 3e18;
int n, dp[mxn], res = 0;
string s;
vector<int> g[mxn];
void dfs(int u, int pre){
    for (int v : g[u]) if (v != pre){
        dfs(v, u);
        dp[u] += dp[v];
        res = max(res, dp[v] + (s[u] == '1'));
    }
    if (s[u] == '1'){
        --dp[u];
        dp[u] = max(dp[u], 1);
    }
    res = max(res, dp[u]);
}
void solve(){
    cin >> n;
    for (int i = 1, u, v; i <= n - 1; ++i){
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    cin >> s, s = " " + s;
    dfs(1, 0);
    cout << res;
}
int main(){
	auto start = chrono::steady_clock::now();
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t = 1;
    // cin >> t;
    while(t--) solve();
    chrono::duration<double> elapsed {chrono::steady_clock::now() - start};
    cerr << "\n>> Runtime: " << elapsed.count() << "s\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...