1. #include <cstdio>
    2. #include <algorithm>
    3. #include <cstring>
    4. #include <cstdlib>
    5. #include <iostream>
    6. #include <queue>
    7. using namespace std;
    8. inline int gi(){
    9. char tmp=getchar();int ans=0;
    10. while(!isdigit(tmp)) tmp=getchar();
    11. while(isdigit(tmp)){
    12. ans = ans * 10 + tmp - '0';
    13. tmp = getchar();
    14. }
    15. return ans;
    16. }
    17. const int N = 2002000;
    18. struct Edg{
    19. int v,nxt;
    20. }Edge[N<<1];int Head[N];
    21. inline void Add(int u,int v){
    22. static int cnt = 0;
    23. Edge[++cnt].v=v;Edge[cnt].nxt=Head[u];Head[u]=cnt;
    24. }
    25. inline int lowbit(int x){return x&-x;}
    26. int F[N],D[N],Vis[N],C[N],Size[N],Id[N];
    27. int n;
    28. inline void Mark(int pos,int v){
    29. while(pos <= n){
    30. C[pos] += v;
    31. pos += lowbit(pos);
    32. }
    33. }
    34. inline int Sum(int pos){
    35. int ans = 0 ;
    36. while(pos){
    37. ans += C[pos];
    38. pos -= lowbit(pos);
    39. }
    40. return ans;
    41. }
    42. int tot = 0;
    43. void Dfs(int pos,int fa){
    44. Size[pos] = 1;
    45. Id[pos] = ++tot;
    46. D[pos] = D[fa]+1;
    47. for(int i=Head[pos];i;i=Edge[i].nxt){
    48. int arr = Edge[i].v;
    49. if(arr == fa) continue;
    50. F[arr] += pos;
    51. Dfs(arr,pos);
    52. Size[pos] += Size[arr];
    53. }
    54. return ;
    55. }
    56. signed main()
    57. {
    58. #ifdef TSUKIAKIOI
    59. freopen("data.in","r",stdin);
    60. #endif
    61. int m;n=gi(),m=gi();
    62. for(int i=1;i<n;++i){
    63. int a,b;
    64. a=gi(),b=gi();
    65. Add(a,b);Add(b,a);
    66. }
    67. int remain = n - m;
    68. Vis[0] = 1;
    69. Dfs(n,0);
    70. for(int i=n;i>=1;--i){
    71. if(Vis[i]) continue;
    72. int x = Sum(Id[i]);
    73. // 当前节点到联通块上有几个节点
    74. if(D[i] - x <= remain){
    75. remain -= (D[i]-x);
    76. //printf("Succussfully Add %d, extra nodes:%d\n",i,D[i]-x);
    77. int pos = i;
    78. int ed=0;
    79. while(!Vis[pos]){
    80. Vis[pos] = 1;
    81. pos = F[pos];
    82. if(pos)
    83. ed = pos;
    84. }
    85. pos = i;
    86. while(pos != ed){
    87. Mark(Id[pos],1);
    88. Mark(Id[pos]+Size[pos],-1);
    89. pos = F[pos];
    90. }
    91. }
    92. }
    93. for(int i=1;i<=n;++i)
    94. if(!Vis[i])
    95. printf("%d ",i);
    96. return 0;
    97. }