前者得分 100,后者得分 18。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
long long dp[maxn],dpans[maxn];
vector<pair<int,long long> >edge[maxn];
void dfs(int u,int fath){
vector<long long>sta;
sta.clear();
for(int i=0;i<edge[u].size();i++){
pair<int,int> cur=edge[u][i];
int v=cur.first;
long long w=cur.second;
if(v==fath) continue; dfs(v,u);
sta.push_back(w+dp[v]);
}
int cnt=sta.size();
sort(sta.begin(),sta.end());
if(cnt>0) dp[u]=dpans[u]=sta[cnt-1];
if(cnt>1){
dpans[u]=sta[cnt-2]+sta[cnt-1];
}
}
int main(){
int n;scanf("%d",&n);
for(int i=1;i<n;i++){
int u,v;long long w;scanf("%d%d%lld",&u,&v,&w);
edge[u].push_back(make_pair(v,w));
edge[v].push_back(make_pair(u,w));
}
dfs(1,0); long long ans=0;
for(int i=1;i<=n;i++) ans=max(ans,dpans[i]);
long long val=10ll*ans+1ll*ans*(ans+1)/2;
printf("%lld\n",val);
return 0;
}
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e5+10;
int dp[maxn],dis[maxn];
int sta[maxn];
vector<pair<int,int> >edge[maxn];
void dfs(int u,int dad){
int pos=0;
for(int i=0;i<edge[u].size();i++){
pair<int,int> cur=edge[u][i];
int v=cur.first,w=cur.second;
if(v==dad) continue;
dfs(v,u); sta[++pos]=dp[v]+w;
}
sort(sta+1,sta+1+pos);
if(pos>0) dp[u]=dis[u]=sta[pos];
if(pos>1){
dis[u]=max(dis[u],sta[pos]+sta[pos-1]);
}
}
signed main(){
int n;scanf("%lld",&n);
for(int i=1;i<n;i++){
int u,v,w;scanf("%lld%lld%lld",&u,&v,&w);
edge[u].push_back(make_pair(v,w));
edge[v].push_back(make_pair(u,w));
}
dfs(1,0); int ans=0;
for(int i=1;i<=n;i++) ans=max(ans,dis[i]);
long long val=10ll*ans+1ll*ans*(ans+1)/2;
printf("%lld\n",val);
return 0;
}