1 条题解

  • 0
    @ 2026-4-3 13:44:43
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N=2e5+10,inf=1e9;
    vector<int>G[N];
    int dp[N],k,sum,n,m;
    void dfs(int x,int f)
    {
    	int mx=-inf,mn=0;dp[x]=0;
    	for(int y:G[x])if(y!=f)
    	{
    		dfs(y,x);
    		mx=max(mx,dp[y]+1);
    		mn=min(mn,dp[y]+1);
    	}
    	if(mx+mn<0)dp[x]=mn;
    	else if(mx>=k)dp[x]=-k-1,sum++;
    	else dp[x]=(mx==-inf?0:mx);
    	if(x==1&&dp[x]>=0)sum++;
    }
    bool check(int kk)
    {
    	k=kk,sum=0;
    	dfs(1,0);
    	return sum<=m;
    }
    signed main()
    {
    	cin>>n>>m;
    	for(int i=1;i<n;i++)
    	{
    		int x,y;cin>>x>>y;
    		G[x].push_back(y);
    		G[y].push_back(x);
    	}
    	int l=1,r=n,ans=n;
    	while(l<=r)
    	{
    		int mid=(l+r)>>1;
    		if(check(mid))r=mid-1,ans=mid;
    		else l=mid+1;
    	}
    	cout<<ans;
    	return 0;
    }
    • 1

    信息

    ID
    9275
    时间
    3000ms
    内存
    1024MiB
    难度
    8
    标签
    递交数
    14
    已通过
    6
    上传者