呜呜呜只有 30pts,求教教
/*
Tue. 2023.5.2
Powered by Sheez
*/
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
struct edge{int t;long long w;};
int n,L,R,k,pre[N],nex[N];
long long Max[N],dis[N],ltmp,ans;
bool vis[N];
vector<edge>e[N];
void dfs1(int u,int fa,long long len,bool b)
{
vis[u]=1;
if(len>ltmp){ltmp=len;if(b)L=u;}
for(auto x:e[u])
if(!vis[x.t]&&fa!=x.t)dfs1(x.t,u,len+x.w,b);
return;
}
void dfs2(int u,int fa,long long len,bool b)
{
vis[u]=1;
if(len>ltmp){ltmp=len;if(b)R=u;}
for(auto x:e[u])
if(!vis[x.t]&&fa!=x.t)dfs2(x.t,u,len+x.w,b);
return;
}
bool pretr(int u)
{
vis[u]=1;
if(u==R)return 1;
for(auto x:e[u])
if(!vis[x.t]&&pretr(x.t))
{pre[x.t]=u;nex[u]=x.t;dis[u]=dis[x.t]-x.w;return 1;}
return 0;
}
signed main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{
int x,y;long long z;
scanf("%d%d%lld",&x,&y,&z);
e[x].push_back(edge{y,z});e[y].push_back(edge{x,z});
}
dfs1(1,0,0,1);memset(vis,0,sizeof(vis));ltmp=0;
dfs2(L,0,0,1);memset(vis,0,sizeof(vis));
printf("%lld\n",dis[R]=ltmp);
pretr(L);memset(vis,0,sizeof(vis));
for(int i=R;i;i=pre[i])vis[i]=1;
for(int i=R;i;i=pre[i])ltmp=0,dfs1(i,0,0,0),Max[i]=ltmp;
//for(int i=L;i;i=nex[i])printf("%d %d %d\n",i,dis[i],Max[i]);
for(k=L;k;k=nex[k])if(dis[R]-dis[k]==Max[k])break;
for(;k;k=pre[k])if(dis[k]-dis[L]!=Max[k])ans++;
printf("%lld\n",ans);
return 0;
}