这题的数据太水,以至于我的这份代码连样例都过不了,却能水过去,直接AC。可以把样例或者别的什么数据添一下,卡掉这种代码。
//#include<iostream>
//#include<fstream>
#include<cstdio>
//#include<vector>
//#include<cstring>
//#include<algorithm>
using namespace std;
const int N=100005;
struct node
{
int to,w,next;
}Edge[N*2];
int n,u,v,w,Et,head[N],dp[N],ans;
int max(int AA,int BB)
{
return (AA>BB?AA:BB);
}
inline int read()
{
char c;
int num;
do{
c=getchar();
}while(c<'0'||c>'9');
num=c-'0';
c=getchar();
while(c>='0'&&c<='9')
{
num=num*10+c-'0';c=getchar();
}
return num;
}
void add(int from,int to,int length)
{
Edge[++Et]=(node){to,length,head[from]};
head[from]=Et;
}
void dfs(int Rot,int fa)
{
dp[Rot]=0;
for(int i=head[Rot];i!=-1;i=Edge[i].next)
{
if(Edge[i].to!=fa)
{
dfs(Edge[i].to,Rot);
dp[Rot]=max(dp[Rot],Edge[i].w+dp[Edge[i].to]);
}
}
ans=max(ans,dp[Rot]);
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
head[i]=-1;
for(int i=1;i<n;i++)
{
u=read(),v=read(),w=read();
add(u,v,w);
add(v,u,w);
}
for(int i=n;i>=n/3*2;i--)dfs(i,-1);
// printf("%d\n",ans);
printf("%d",(11+10+ans)*ans/2);
return 0;
}