Submission #1184319

#TimeUsernameProblemLanguageResultExecution timeMemory
1184319GrayPower Plant (JOI20_power)C++20
100 / 100
88 ms29032 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll int
#define ull unsigned long long
#define ld long double
#define ff first
#define ss second
#define ln "\n"
#define mp make_pair
#define pb push_back
#define INF (ll)2e18
#define MOD (ll)(1e9+7)

vector<vector<ll>> A;
string s;
vector<ll> dp;

void dfs(ll u, ll p, ll &res){
    ll ret=0, mx=0;
    for (auto v:A[u]){
        if (v==p) continue;
        dfs(v, u, res);
        mx=max(mx, dp[v]);
        ret+=dp[v];
    }
    dp[u] = max((ll)(s[u]=='1'), ((ret==0)?s[u]=='1':ret-(s[u]=='1')));

    res=max(res, mx+(s[u]=='1'));
    res=max(res, dp[u]);
}

void solve(){
    ll n; cin >> n;
    A.resize(n+1); dp.resize(n+1);
    for (ll i=0; i<n-1; i++){
        ll u, v; cin >> u >> v;
        A[u].push_back(v); A[v].push_back(u);
    }
    cin >> s; s="$"+s;
    ll res=0; dfs(1, 1, res);
    cout << res << ln;
}
/*
9-2
101110010001

*/
int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    #ifdef LOCAL
    auto start = chrono::high_resolution_clock::now();
    #endif
    ll t=1;
    // cin >> t;
    for (ll c=1; c<=t; c++) solve();
    #ifdef LOCAL
    auto duration = chrono::duration_cast<chrono::microseconds>(chrono::high_resolution_clock::now() - start);
    cout << setprecision(0) << fixed << "time: " << (double)duration.count()/1000.0 << " milliseconds" << endl;
    #endif
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...