#include <bits/stdc++.h>
#define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
using namespace std;
const int N = 2e5 + 5;
int n;
string s;
vector<int> g[N];
int ans = 0;
int dp[N];
void dfs(int u, int p) {
int mx = 0;
int sum = 0;
for (auto v : g[u]) if (v != p) {
dfs(v, u);
mx = max(mx, dp[v]);
sum += dp[v];
}
mx += (s[u] - '0');
sum -= (s[u] - '0');
sum = max(sum, (s[u] - '0'));
ans = max({ans, mx, sum});
dp[u] = max(mx - 2 * (s[u] - '0'), sum);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
// file("A") else file("task");
cin >> n;
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
u--, v--;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
cin >> s;
dfs(0, -1);
cout << ans << '\n';
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... |