1 条题解

  • 0
    @ 2025-10-8 16:49:23
    #include <bits/stdc++.h>
    using namespace std;
    const int N=100010;
    vector<int> G[N];
    int n,s[N],g[N],rt,ans;
    void dfs(int x,int fa) 
    {
    	s[x]=1,g[x]=0;;
    	for(auto y:G[x])if(y!=fa) 
    	{
    		dfs(y,x);
    		s[x]+=s[y];
    		g[x]=max(g[x],s[y]);
    	}
    	g[x]=max(g[x],n-s[x]);
    	if(g[x]*2<=n)rt=x,ans=g[x];
    }
    int main() 
    {
    	scanf("%d",&n);
    	for(int i=1,x,y;i<n;i++) 
    	{
    		scanf("%d%d",&x,&y);
    		G[x].push_back(y);
    		G[y].push_back(x);
    	}
    	dfs(1,0);
    	printf("%d\n",ans);
    	return 0;
    }
    
    • 1

    *【树形DP:树的重心】树的重心

    信息

    ID
    321
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    281
    已通过
    71
    上传者