Submission #1166078

#TimeUsernameProblemLanguageResultExecution timeMemory
1166078GurbanBeads and wires (APIO14_beads)C++17
28 / 100
1095 ms5444 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int inf = 1e9;

const int maxn=2e5+5;
int n;
int dp[maxn][2];
vector<pair<int,int>>E[maxn];

void dfs(int nd,int par){
	dp[nd][0] = 0;
	dp[nd][1] = -inf;

	int md = -inf;

	for(auto i : E[nd]){
		int to = i.first;
		int w = i.second;
		if(to != par){
			dfs(to,nd);
			
			int gain = max(dp[to][0], dp[to][1] + w);
			dp[nd][0] += gain;
		
			md = max(md, dp[to][0] + w - gain);
		}

	}

	if(md != -inf){
		dp[nd][1] = dp[nd][0] + md;
	}
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> n;
	for(int i = 1;i < n;i++){
		int x,y,w;
		cin >> x >> y >> w;
		E[x].push_back({y,w});
		E[y].push_back({x,w});
	}

	int ans = 0;
	for(int i = 1;i <= n;i++){
		dfs(i,-1);
		// cout<<i<<" --> "<<dp[i][0]<<' '<<dp[i][1]<<'\n';
		ans = max(ans,dp[i][0]);
	}
	cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...