1 solutions

  • -1
    @ 2025-8-8 12:00:17
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10,M=2e5+10,INF=0x3f3f3f3f;
    int h[N],e[M],ne[M],w[M],idx;
    int d1[N],d2[N],p[N],leaf[N],up[N];
    void add(int a,int b,int c)
    {
    	e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;
    }
    int dfs(int u,int father)
    {
    	d1[u]=d2[u]=-INF;
    	for(int i=h[u];i!=-1;i=ne[i])
    	{
    		int j=e[i];
    		if(j==father) continue;
    		int d=dfs(j,u)+w[i];
    		if(d>d1[u])
    		{
    			d2[u]=d1[u],d1[u]=d;
    			p[u]=j;
    		}
    		else
    		{
    			d2[u]=d;
    		}
    	}
    	if(d1[u]==-INF)
    	{
    		leaf[u]=1;
    		d1[u]=d2[u]=0;
    	}
    	else if(d2[u]==-INF)
    	{
    		d2[u]=0;
    	}
    	return d1[u];
    }
    void dfs2(int u,int father)
    {
    	for(int i=h[u];i!=-1;i=ne[i])
    	{
    		int j=e[i];
    		if(j==father) continue;
    		if(p[u]==j)
    		{
    			up[j]=max(d2[u],up[u])+w[i];
    		}
    		else up[j]=max(d1[u],up[u])+w[i];
    		dfs2(j,u);
    	}
    }
    int main()
    {
    	int n;
    	cin>>n;
    	memset(h,-1,sizeof h);
    	for(int i=1;i<n;i++)
    	{
    		int a,b,c;
    		cin>>a>>b>>c;
    		add(a,b,c);
    		add(b,a,c);
    	}
    	dfs(1,-1);
    	dfs2(1,-1);
    	int ans=INF;
    	for(int i=1;i<=n;i++)
    	{
    		if(leaf[i]) ans=min(ans,up[i]);
    		else ans=min(ans,max(d1[i],up[i]));
    	}
    	cout<<ans;
    	return 0;
    }
    

    Information

    ID
    374
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    10
    Tags
    # Submissions
    7
    Accepted
    4
    Uploaded By