This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//in the name of allah
#include<vector>
#include<iostream>
#include<map>
#include<bitset>
#include<algorithm>
#include<set>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
const int maxn = 2e5+1 , inf = 1e9;
typedef pair<int , int> ii;
int dpr[maxn] , dpe[maxn] , dp[maxn] , dpt[maxn] , n;
vector<ii> g[maxn];
void dfs(int v , int par){
dpe[v] = -1e9;
dpt[v] = -1e9;
int sum=0;
set<ii> st;
for(auto U : g[v]){
int u = U.first , w = U.second;
if(u == par)
continue;
dfs(u , v);
int cur = max(dpe[u] + w , dp[u]);
sum += cur;
st.insert(ii(w+dpr[u]-cur , u));
}
dpr[v] = sum;
dp[v] = dpr[v];
for(auto U : g[v]){
int u = U.first , w = U.second;
if(u == par)
continue;
int cur = max(dpe[u] + w , dp[u]);
dpt[v] = max(dpt[v] , sum - cur + w + dp[u]);
dpe[v] = max(dpe[v] , sum - cur + w + dpr[u]);
st.erase(ii(w+dpr[u]-cur , u));
if((int)st.size())
dp[v] = max(dp[v] , dp[u] + w + sum - cur + st.rbegin()->first);
dp[v] = max(dp[v] , dpt[u] + w + sum - cur);
st.insert(ii(w+dpr[u]-cur , u));
}
}
int main(){
scanf("%d" , &n);
for(int i=0 ; i<n-1 ; i++){
int v , u , w;
scanf("%d%d%d" , &v , &u , &w);
v --;
u --;
g[v].push_back(ii(u , w));
g[u].push_back(ii(v , w));
}
dfs(0 , -1);
printf("%d\n" , dp[0]);
}
/*
10
4 10 2 1 2 21 1 3 13 6 7 1 7 9 5 2 4 3 2 5 8 1 6 55 6 8 34
*/
Compilation message (stderr)
beads.cpp: In function 'int main()':
beads.cpp:49:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d" , &n);
~~~~~^~~~~~~~~~~
beads.cpp:52:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d" , &v , &u , &w);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |