1.题目


2.代码
#include<bits/stdc++.h>
const int MAXN=100010;
typedef long long LL;
using namespace std;
int n,P,Q,D;
vector<pair <int,int>> r[MAXN];
bool vis[MAXN]={false};
int DFS(int node,int &d)
{
vis[node]=true;
int maxd=0,dc=node;
for(int i=0;i<r[node].size();i++)
{
int v=r[node][i].first;
if(!vis[v])
{
int dcc;
int w=r[node][i].second+DFS(v,dcc);
if(w>maxd)
{
maxd=w;
dc=dcc;
}
}
}
d=dc;
vis[node]=false;
return maxd;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n-1;i++)
{
scanf("%d%d%d",&P,&Q,&D);
pair <int,int> p1(P,D);
pair <int,int> p2(Q,D);
r[Q].push_back(p1);
r[P].push_back(p2);
}
int maxd=0,v,m;
DFS(1,v);
maxd=DFS(v,m);
printf("%lld\n",(LL)(10*maxd+(LL)(1+maxd)*maxd/2));
return 0;
}