제출 #440107

#제출 시각아이디문제언어결과실행 시간메모리
440107Sohsoh84Power Plant (JOI20_power)C++14
100 / 100
247 ms50752 KiB
// ¯\_(ツ)_/¯
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<ll, ll> pll;

#define all(x)                      (x).begin(),(x).end()
#define X                           first
#define Y                           second
#define sep                         ' '
#define endl                        '\n'
#define debug(x)                    cerr << #x << ": " <<  x << endl;

const ll MAXN = 1e6 + 10;
const ll INF = 1e9;
const ll MOD = 1e9 + 7; // 998244353; // 1e9 + 9;

int n, dp[MAXN], ans = 0;
bool B[MAXN];
vector<int> adj[MAXN];

void dfs(int v, int p) {
	if (!B[v]) {
		dp[v] = 0;
		for (int u : adj[v]) {
			if (u == p) continue;
			dfs(u, v);
			dp[v] += dp[u];
		}

		ans = max(ans, dp[v]);
		return;
	}

	int mx = 0;
	dp[v] = -1;
	for (int u : adj[v]) {
		if (u == p) continue;
		dfs(u, v);
		dp[v] += dp[u];
		mx = max(mx, dp[u]);
	}

	dp[v] = max(dp[v], 1);
	ans = max({ans, mx + 1, dp[v]});
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	cin >> n;
	fill(dp, dp + MAXN, -INF);

	for (int i = 0; i < n - 1; i++) {
		int u, v;
		cin >> u >> v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}

	for (int i = 1; i <= n; i++) {
		char c;
		cin >> c;
		B[i] = (c == '1');
	}
	
	dfs(1, 0);
	
	cout << ans << endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...