fork download
  1. ///Link: https://l...content-available-to-author-only...s.com/group/pruqgqgzZe/contest/725905
  2. ///Author: NHB_0xCKT
  3. #include <bits/stdc++.h>
  4. #define ll long long
  5. #define oo (ll)1e18
  6. #define ioo (int)1e9
  7. #define pii pair<int,int>
  8. #define F first
  9. #define S second
  10. #define NAME ""
  11. using namespace std;
  12. const int MM = 1e5+5;
  13. vector<int>adj[MM], pre[MM], suf[MM];
  14. vector<pair<int,int>>vec[MM];
  15. int n,k,f[MM],ans;
  16. void dfs(int u, int par){
  17. int res = 0;
  18. for(auto v : adj[u]){
  19. if(v == par) continue;
  20. dfs(v,u);
  21. vec[u].push_back({f[v],v});
  22. }
  23. sort(vec[u].begin(),vec[u].end(),greater<pair<int,int>>());
  24. for(int i = 0;i<(int)vec[u].size();i++) res = max(res,vec[u][i].F + i/k + 1);
  25. f[u] = res;
  26. }
  27. void dfs_reroot(int u, int par){
  28. sort(vec[u].begin(),vec[u].end(),greater<pair<int,int>>());
  29. int res = 0;
  30. for(int i = 0;i<(int)vec[u].size();i++) res = max(res,vec[u][i].F + i/k + 1);
  31. ans = min(ans,res);
  32. int cntma = 0;
  33. for(int i = 0;i<(int)vec[u].size();i++){
  34. cntma = max(cntma,vec[u][i].F + i/k + 1);
  35. pre[u].push_back(cntma);
  36. }
  37. cntma = 0;
  38. for(int i = vec[u].size()-1;i>=0;i--){
  39. cntma = max(cntma,vec[u][i].F + (i-1)/k + 1);
  40. suf[u].push_back(cntma);
  41. }
  42. reverse(suf[u].begin(),suf[u].end());
  43. for(int i = 0;i<(int)vec[u].size();i++){
  44. if(vec[u][i].S == par) continue;
  45. int newu = 0;
  46. if(i>0) newu = max(newu,pre[u][i-1]);
  47. if(i<(int)vec[u].size() - 1) newu = max(newu,suf[u][i+1]);
  48. vec[vec[u][i].S].push_back({newu,u});
  49. dfs_reroot(vec[u][i].S,u);
  50. }
  51. }
  52. int main(){
  53. // freopen(NAME".inp","r",stdin);
  54. // freopen(NAME".out","w",stdout);
  55. ios::sync_with_stdio(0);
  56. cin.tie(0);
  57. cin>>n>>k;
  58. for(int i = 1;i<n;i++){
  59. int u,v;
  60. cin>>u>>v;
  61. adj[u].push_back(v);
  62. adj[v].push_back(u);
  63. }
  64. ans = n+1;
  65. dfs(1,0);
  66. dfs_reroot(1,0);
  67. cout<<ans<<"\n";
  68. return 0;
  69. }
Success #stdin #stdout 0.01s 12916KB
stdin
Standard input is empty
stdout
0