Submission #422413

#TimeUsernameProblemLanguageResultExecution timeMemory
422413JasiekstrzPower Plant (JOI20_power)C++17
100 / 100
188 ms27360 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const int N=2e5;
vector<int> e[N+10];
int dp[N+10][2];
int t[N+10];
void dfs(int x,int p)
{
	for(auto v:e[x])
	{
		if(v!=p)
			dfs(v,x);
	}
	int s1=0;
	for(auto v:e[x])
	{
		if(v!=p)
			s1+=dp[v][1];
	}
	// dp[0]
	dp[x][0]=t[x];
	for(auto v:e[x])
	{
		if(v!=p)
			dp[x][0]=max({dp[x][0],dp[v][0],dp[v][1]+t[x]});
	}
	dp[x][0]=max(dp[x][0],s1-t[x]);
	// dp[1]
	dp[x][1]=t[x];
	for(auto v:e[x])
	{
		if(v!=p)
			dp[x][1]=max(dp[x][1],dp[v][1]-t[x]);
	}
	dp[x][1]=max(dp[x][1],s1-t[x]);
	return;
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n;
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int a,b;
		cin>>a>>b;
		e[a].push_back(b);
		e[b].push_back(a);
	}
	for(int i=1;i<=n;i++)
	{
		char c;
		cin>>c;
		t[i]=c-'0';
	}
	dfs(1,0);
	cout<<dp[1][0]<<"\n";
	return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...