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