Submission #1255463

#TimeUsernameProblemLanguageResultExecution timeMemory
1255463kamradPower Plant (JOI20_power)C++20
100 / 100
71 ms34888 KiB
#include <bits/stdc++.h>
using namespace std;

//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma,tune=native")

using ll  = long long;
using ld  = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pi3 = pair<pii, int>;

#define IOS               ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define F                 first
#define S                 second
#define sz(x)             x.size()
#define all(x)            x.begin(), x.end()
#define pb                push_back
#define minr(a, b)        a = min(a, b);
#define maxr(a, b)        a = max(a, b);
#define shit              cout << "shit\n" << flush;
#define tl                while(1&1) continue;
#define rand(l, r)        uniform_int_distribution<int64_t>(l,r)(rng)
random_device device;     default_random_engine rng(device());

const int Mod    = 1e9 + 7; //998244353;
const int LG     = 64;
const int SQ     = 500;
const int Inf    = 2e9 + 10;
const int maxN   = 2e5 + 10;

int n;
int a[maxN];
int dp[maxN][2];

vector <int> child[maxN];
vector <int> neighb[maxN];

void dfs(int u, int p) {
	int tmp = 0;
	for(auto v : neighb[u]) {
		if(v != p) {
			dfs(v, u);
			tmp += dp[v][1];
			maxr(dp[u][0], dp[v][0]);
			maxr(dp[u][0], dp[v][1]+a[u]);
		}
	}
	maxr(dp[u][0], tmp-a[u]);
	maxr(dp[u][1], tmp-a[u]);
	maxr(dp[u][1], a[u]);
	maxr(dp[u][0], a[u]);
}

int main() {
	IOS;
	
	cin >> n;
	for(int i = 1; i < n; i++) {
		int u, v;
		cin >> u >> v;
		neighb[u].pb(v);
		neighb[v].pb(u);
	}

	for(int i = 1; i <= n; i++) {
		char c;
		cin >> c;
		a[i] = (c == '1');
	}

	dfs(1, 0);
	cout << dp[1][0];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...