答案比标准答案小(4-->3)
#include<bits/stdc++.h>
using namespace std;
const int N=160,INF=1e5+100;
int f[N][N];
int n,m,siz[N],deg[N];
vector<int>g[N];
void loading(int u)
{
siz[u]=1;
for(int i=0,v;i<deg[u];++i)
{
v=g[u][i];
loading(v);
siz[u]+=siz[v];
}
}
void sea(int u)
{
f[u][siz[u]]=1;
if(deg[u]==0)
return ;
for(int i=0,v;i<deg[u];++i)
{
v=g[u][i];
sea(v);
for(int j=0;j<=siz[u];++j)
{
for(int k=0;k<=min(j,siz[v]);++k)
{
f[u][j]=min(f[u][j-k]+f[v][k],f[u][j]);
//f[u][j] <-- f[v][k]
}
}
}
}
void work()
{
scanf("%d%d",&n,&m);
if(n==m)
{
cout<<0;
return ;
}
for(int i=1,x,y;i<n;++i)
{
scanf("%d%d",&x,&y);
g[x].push_back(y);
++deg[x];
}
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
f[i][j]=INF;
loading(1);
for(int i=1;i<=n;++i)
if(siz[i]==m)
{
cout<<1;
return ;
}
sea(1);
cout<<f[1][n-m];
}
int main()
{
work();
return 0;
}