比赛 EYOI与SBOI开学欢乐赛7th 评测结果 AAAAAAAAAAAAAA
题目名称 重建道路 最终得分 100
用户昵称 湖岸与夜与咸鱼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-09-23 20:43:25
显示代码纯文本
// 河南省实验中学 21急 关天泽 

#include <bits/stdc++.h>
#define N 151
#define INF 0x7f7f7f7f

using namespace std;
int dp[N][N], head[N], d[N];
int n, m, ans, cnt;

struct node{
    int u,v,next; 
}e[N<<1];

void add(int u,int v){
    e[++cnt].v = v;
	e[cnt].next = head[u];
	head[u] = cnt;
}

void dfs(int u,int fa){
    dp[u][1] = d[u];
    for(int i = head[u]; i; i = e[i].next){
        if(e[i].v != fa){
            dfs(e[i].v, u);
            for(int j = m; j >= 1; j--)
              for(int k = 1; k <= j; k++)
                dp[u][j] = min(dp[u][j], dp[e[i].v][k] + dp[u][j - k] - 2);
        }
    }
	ans = min(ans, dp[u][m]);
}

int main(){
	freopen("reroads.in", "r", stdin);
	freopen("reroads.out", "w", stdout);
    int x, y;
    memset(dp, 1, sizeof dp);
    cin >> n >> m;
    for(int i=1;i<n;i++)
    {
        cin >> x >> y;
        add(x, y);
		add(y, x);
        d[x]++;d[y]++;
    }
    ans = INF;
    dfs(1, 0);
    cout << ans << endl;
    return 0;
}