1 solutions

  • 0
    @ 2026-3-16 18:25:47
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    vector<int> g[N];
    int ans=N;
    int n;
    int dfs(int u,int fa) //返回以u为根的节点数目
    {
    	int s=1;
    	int maxv=0; //将u删除以后,连通块中最多的点的数目
    	for(auto j:g[u])
    	{
    		if(j==fa) continue;
    		int c=dfs(j,u);
    		s+=c;
    		maxv=max(maxv,c); //最大值
    	}
    	maxv=max(maxv,n-s);
    	ans=min(ans,maxv);
    	return s;
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<n;i++)
    	{
    		int a,b;
    		cin>>a>>b;
    		g[a].push_back(b);
    		g[b].push_back(a);
    	}
    	dfs(1,-1);
    	cout<<ans;
    	return 0;
    }
    
    • 1

    Information

    ID
    373
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    3
    Tags
    # Submissions
    27
    Accepted
    9
    Uploaded By