Submission #1304238

#TimeUsernameProblemLanguageResultExecution timeMemory
1304238hoa208Power Plant (JOI20_power)C++20
100 / 100
87 ms34124 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, b, a) for (int i = (b), _a = (a); i >= _a; i--)
#define pa pair<ll, ll>
#define fi first
#define se second
#define bit(mask, j) ((mask >> j) & 1)
const   ll mod = 1e9 + 7;
const   ll INF = 1e18;
//--------------------------------------------------------------------

const ll N = 2e5 + 10;
vector<ll> g[N];
ll dp[N][3];
ll c[N];
ll n;
void dfs(ll u, ll p) {
	ll mn = 0;
	ll sum = 0;
	dp[u][1] = c[u];
	for(auto v : g[u]) {
		if(v == p) continue;
		dfs(v, u);
		dp[u][2] = max(dp[u][2], dp[v][2]);
		if(c[u])
			dp[u][2] = max(dp[u][2], dp[v][1] + 1);
		sum += dp[v][1];
	}
	dp[u][1] = max(dp[u][1], sum - c[u]);

}

void hbmt() {
	cin >> n;
	FOR(i, 1, n - 1) {
		ll u, v;
		cin >> u >> v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	ll cnt = 0;
	FOR(i, 1, n) {
		char x;
		cin >> x;
		c[i] = x - '0';
		cnt += c[i];
	}
	if(cnt == 0) {
		cout << 0;
		return;
	}
	ll ans = 0;
	ans = min(cnt, 2LL);
	dfs(1, 0);
	ans = max({ans, dp[1][2], dp[1][1]});
	cout << ans;
}

int main() {
	
	ios_base::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);

	#define NAME "hbmt"
	if(fopen(NAME".inp", "r")) {
		freopen(NAME".inp", "r", stdin);
		freopen(NAME".out", "w", stdout);
	}
	
	//int t;cin>>t;while(t--)
	hbmt();
	return 0;
}

Compilation message (stderr)

power.cpp: In function 'int main()':
power.cpp:68:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   68 |                 freopen(NAME".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
power.cpp:69:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   69 |                 freopen(NAME".out", "w", stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...