1 条题解
-
0
#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
- 上传者