#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<vector>
using namespace std;
#define inf 0x3f3f3f3f
vector<int> f[155];
int d[155],dp[155][155];
int flag[155];
int n,p;
void dfs(int v)
{
flag[v]=1;
int i,j,k;
for(i=0;i<f[v].size();i++)
{
int u=f[v][i];
if(flag[u]==0){
dfs(u);
for(j=p;j>=1;j--)
{
for(k=0;k<=j;k++)
dp[v][j]=min(dp[v][j],dp[v][j-k]+dp[u][k]);
}
}
}
}
int main()
{
int i,j;
cin>>n>>p;
memset(d,0,sizeof(d));
for(i=1;i<n;i++)
{
int a,b;
cin>>a>>b;
d[a]++,d[b]++;
f[a].push_back(b);
f[b].push_back(a);
}
memset(dp,inf,sizeof(dp));
memset(flag,0,sizeof(flag));
for(i=1;i<=n;i++)
{
dp[i][1]=d[i];
}
dfs(1);
int mn=100000000;
for(i=1;i<=n;i++)
mn=min(mn,dp[i][p]);
cout<<mn-2*(p-1)<<endl;
//system("pause");
}
poj-1947-Rebuilding Roads
最新推荐文章于 2020-05-20 12:49:31 发布