#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |