Submission #1184313

#TimeUsernameProblemLanguageResultExecution timeMemory
1184313GrayPower Plant (JOI20_power)C++20
0 / 100
0 ms320 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;

ll dfs(ll u, ll p, ll &res){
    ll ret=0, cnt=0;
    for (auto v:A[u]){
        if (v==p) continue;
        ll cur = dfs(v, u, res);
        if (cur) cnt++;
        ret+=cur;
    }
    if (cnt==0 and s[u]=='1') {
        ret++; res=max(res, ret);
    } else if (cnt==1 and s[u]=='1') {
        res=max(res, ret+1);
    } else res=max(res, ret);
    return ret;
}

void solve(){
    ll n; cin >> n;
    A.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;
    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...