#include <bits/stdc++.h>
#define _ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fore(i,a,b) for(lli i = (a), abcdxd = (b); i < abcdxd; i++)
#define f first
#define s second
#define pb push_back
#define ENDL '\n'
#define sz(s) lli((s).size())
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
using namespace std;
typedef int lli;
typedef pair<lli,lli> ii;
typedef vector<lli> vi;
typedef vector<ii> vii;
typedef long double ld;
#define deb(x) cout << #x << ": " << x << endl;
const lli N = 4e5 + 12;
lli ANS = 0;
vii adj[N];
lli dp[N];
bool vis[N];
lli n;
char s[N];
lli dfs(lli u, lli p, lli st){
bool& mem = vis[st];
lli& res = dp[st];
if (!mem){
// GLcc++;
mem = true;
lli ans = 0;
for (auto & i : adj[u]) if (i.f != p) ans += dfs(i.f, u, i.s);
// cout << u+1 << ": " << max(ans - lli(s[u] - '0'), lli(s[u] - '0')) << endl;
res = max(ans - lli(s[u] - '0'), lli(s[u] - '0'));
}
ANS = max(ANS, res);
return res;
}
lli calc(lli u){
lli ans = 0, cc = 0;
for (auto & i : adj[u]){
lli xx = dfs(i.f, u, i.s);
if (xx >= 1) cc++;
ans += xx;
}
return ans + (cc > 1 ? -1 : +1);
}
void solve(){
cin >> n;
fore(i,1,n){
lli a, b; cin >> a >> b; a--, b--;
adj[a].pb({b, i+i});
adj[b].pb({a, i+i+1});
}
fore(i,0,n) cin >> s[i];
fore(i,0,n) if (s[i] == '1'){
ANS = max(calc(i), ANS);
break;
// return;
}
cout << ANS << ENDL;
// deb(GLcc);
}
int main(){ _
// freopen("tracing.in", "r", stdin);
// freopen("tracing.out", "w", stdout);
// lli t; cin >> t;
// while (t--)
solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |