请求加强数据。
rt,样例都没过AC了。
还跑得飞快。
///*****Sellaris*****///
//#pragma once
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
#include <bits/stdc++.h>
#include <bits/extc++.h>
#define ll long long
using namespace std;
using namespace __gnu_pbds;
const int maxn=8e5;
inline int read(){
int ret=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){ret=ret*10+ch-'0';ch=getchar();}
return ret*f; //x=(x<<1)+(x<<3)+(ch^48);
}
int tot;
int dis[maxn];
int n,s;
int mx,cur;
int pre[maxn];
int vis[maxn];
int val[maxn];
int head[maxn];
int ans;
struct Edge{
int u,v,w,next;
}G[maxn<<1];
inline void addedge(int u,int v,int w){
G[++tot].u=u;G[tot].v=v;G[tot].w=w;G[tot].next=head[u];head[u]=tot;
G[++tot].u=v;G[tot].v=u;G[tot].w=w;G[tot].next=head[v];head[v]=tot;
}
inline void dfs(int u,int fa){
for(int i=head[u];i;i=G[i].next){
int v=G[i].v;if(v==fa)continue;
dis[v]=dis[u]+G[i].w;pre[v]=u;
if(dis[v]>mx)cur=v,mx=dis[v];
dfs(v,u);
}
}
inline void scan(){
n=read();s=read();
for(int i=1;i<n;i++){
int u=read(),v=read(),w=read();
addedge(u,v,w);
}
}
inline void tag(){
int x=pre[cur];
vis[cur]=1;
while(x){
vis[x]=1;
x=pre[x];
}
}
inline int dfs2(int u,int fa){
if(val[u]) return val[u];
for(int i=head[u];i;i=G[i].next){
int v=G[i].v;
if(v==fa) continue;
if(vis[v]) continue;
dfs2(v,u);
val[u]=max(val[u],val[v]+G[i].w);
}
return val[u];
}
inline void find(){
for(int j=1;j<=n;j++){
if(vis[j]){
dfs2(j,pre[j]);
ans=max(ans,val[j]);
}
}
}
signed main(){
//std::ios::sync_with_stdio(false);std::cin.tie(NULL);std::cout.tie(NULL);
//freopen(in.txt,r,stdin);freopen(out.txt,w,stdout);
scan();
dfs(1,0);
mx=0;memset(dis,0,sizeof(dis));
pre[cur]=0;
dfs(cur,0);
tag();
find();
std::cout<<ans;
return 0;
}
第二个样例应该输出 5 程序输出 4 AC记录