1 条题解

  • 0
    @ 2025-10-8 16:49:29

    80分的程序:

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    vector<pair<int,int>> G[N];
    int n,d1[N],d2[N];
    
    void dfs(int x,int fa) 
    {
    	for(auto i:G[x]) 
    	{
    		int y=i.first,c=i.second;if(y==fa)continue;
    		dfs(y,x);
    		if(d1[y]+c>d1[x])      d2[x]=d1[x],d1[x]=d1[y]+c;
    		else if(d1[y]+c>d2[x] )d2[x]=d1[y]+c;
    	}
    }
    
    int main() 
    {
    	scanf("%d",&n);
    	for(int i=1,x,y,c; i<=n-1; i++) 
    	{
    		scanf("%d%d%d",&x,&y,&c);
    		G[x].push_back({y,c});
    		G[y].push_back({x,c});
    	}
    	int ans=1e9+10;
    	for(int i=1;i<=n;i++)
    	{
    		memset(d1,0,sizeof(d1));memset(d2,0,sizeof(d2));
    		dfs(i,0);
    		ans=min(ans,d1[i]);
    	}	
    	printf("%d\n",ans);
    	return 0;
    }
    

    100分的程序:

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    vector<pair<int,int>> G[N];
    int n,d1[N],d2[N],path[N],up[N];
    
    void dfs(int x,int fa) 
    {
    	for(auto i:G[x]) 
    	{
    		int y=i.first,c=i.second;if(y==fa)continue;
    		dfs(y,x);
    		if(d1[y]+c>d1[x]) d2[x]=d1[x],d1[x]=d1[y]+c,path[x]=y;
    		else if(d1[y]+c>d2[x] )d2[x]=d1[y]+c;
    	}
    }
    void dfs2(int x,int fa)
    {
    	for(auto i:G[x]) 
    	{
    		int y=i.first,c=i.second;if(y==fa)continue;
    		if(y==path[x])up[y]=max(up[x],d2[x])+c;
    		else          up[y]=max(up[x],d1[x])+c;
    		dfs2(y, x);
    	}
    }
    int main() 
    {
    	scanf("%d",&n);
    	for(int i=1,x,y,c; i<=n-1; i++) 
    	{
    		scanf("%d%d%d",&x,&y,&c);
    		G[x].push_back({y,c});
    		G[y].push_back({x,c});
    	}
    	memset(d1,0,sizeof(d1));memset(d2,0,sizeof(d2));
    	memset(up,0,sizeof(up));
    	dfs(1,0);
    	dfs2(1,0);
    	int ans=1e9+10;
    	for(int i=1; i<=n; i++)ans=min(ans,max(d1[i],up[i]));
    	printf("%d\n",ans);
    	return 0;
    }
    
    • 1

    *【树形DP:树的中心】树的中心[scy]

    信息

    ID
    305
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    390
    已通过
    79
    上传者