fork download
  1. import math
  2. def find(u, par):
  3.  
  4. if par[u] != u:
  5. par[u] = find(par[u], par)
  6. return par[u]
  7.  
  8. def union(u, v, par, size):
  9. u_root = find(u, par)
  10. v_root = find(v, par)
  11.  
  12. if u_root == v_root:
  13. return
  14.  
  15.  
  16. if size[u_root] < size[v_root]:
  17. par[u_root] = v_root
  18. size[v_root] += size[u_root]
  19. else:
  20. par[v_root] = u_root
  21. size[u_root] += size[v_root]
  22.  
  23. def ip():
  24. return map(int,input().split())
  25.  
  26.  
  27.  
  28.  
  29. T=1
  30. T=int(input())
  31. for __ in range(T):
  32. a=input()
  33. n,k=ip()
  34. adj=[[] for _ in range(n)]
  35. deg={}
  36. for i in range(n):
  37. deg[i]=0
  38. for _ in range(n-1):
  39. u,v=ip()
  40. adj[u-1].append(v-1)
  41. adj[v-1].append(u-1)
  42. deg[u-1]+=1
  43. deg[v-1]+=1
  44. ct=[-1 for _ in range(n)]
  45. unsafe=set()
  46. dd=set()
  47. if n == 1 and k >= 1:
  48. print(0)
  49. continue
  50. for i in range(n):
  51. if deg[i]<=1:
  52. unsafe.add(i)
  53.  
  54. t=1
  55. while unsafe and t<=k:
  56. st=set()
  57. for i in unsafe:
  58. # ct[i]=t
  59. for v in adj[i]:
  60. if v not in dd and v not in unsafe:
  61. deg[v]-=1
  62. if deg[v]<=1:
  63. st.add(v)
  64. for i in unsafe:
  65. dd.add(i)
  66. unsafe=st
  67. t+=1
  68.  
  69. print(n-len(dd))
  70.  
  71.  
Success #stdin #stdout 0.1s 14080KB
stdin
6

14 1
1 2
2 3
2 4
4 5
4 6
2 7
7 8
8 9
8 10
3 11
3 12
1 13
13 14

2 200000
1 2

3 2
1 2
2 3

5 1
5 1
3 2
2 1
5 4

6 2
5 1
2 5
5 6
4 2
3 4

7 1
4 3
5 1
1 3
6 1
1 7
2 1
stdout
7
0
0
3
1
2