#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N =1e6+10;
LL e[N*2],h[N*2], ne[N*2],idx;
void add(int a, int b){
e[idx]= b, ne[idx] = h[a],h[a]=idx++ ;
}
LL n,m,k;
LL fa[N], son[N], num[N];
bool st[N]={0};
int dfs(int root,int cnt ){
// cout<<"?"<<" ";
st[root]=1 ;
int sum =0 ;
for(int i=h[root];i!=-1;i=ne[i]){
int j =e[i];
if(st[j])continue ;
int s =dfs(j,cnt+1);
sum+=s;
}
fa[root] =cnt;
son[root]= sum;
num[root] =fa[root]-son[root];
//cout<<cnt-sum<<" "<<root<<endl;
return sum+1;
}
int main(){
cin >>n >> m;
memset(h,-1,sizeof h);
for(int i=1;i<n;i++){
int a,b;cin >>a >>b ;
add(a,b ) ;add(b,a);
}
// cout<<"?"<<endl;
dfs(1,0);
sort(num+1, num+1+n);
// for(int i=1 ;i<=n;i++)cout<<num[i]<<" ";cout<<endl;
LL sum =0 ;
for(int i=n;i>=max(1LL,n-m+1);i--) sum+=num[i];
cout<<sum<<endl;
}
原文:https://www.cnblogs.com/QFNU-ACM/p/12979192.html