题目描述

一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的。因此,牧场运输系统可以被构建成一棵树。John想要知道另一次地震会造成多严重的破坏。有些道路一旦被毁坏,就会使一棵含有P(1≤P≤N)个牲口棚的子树和剩余的牲口棚分离,John想知道这些道路的最小数目。

输入输出格式

输入格式:

第1行:2个整数,N和P

第2..N行:每行2个整数I和J,表示节点I是节点J的父节点。

输出格式:

单独一行,包含一旦被破坏将分离出恰含P个节点的子树的道路的最小数目。

输入输出样例

输入样例#1:

11 6
1 2
1 3
1 4
1 5
2 6
2 7
2 8
4 9
4 10
4 11
输出样例#1:

2

说明

【样例解释】

如果道路1-4和1-5被破坏,含有节点(1,2,3,6,7,8)的子树将被分离出来


#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; int n, m;
struct edge
{
int nxt, to;
}ed[];
int head[], cnt;
inline void add(int x, int y) {ed[++cnt]=(edge){head[x], y};head[x]=cnt;}
int vis[];int root;
int f[][];
int siz[];
int son[];
inline int dfs(int x)
{
siz[x] = ;
for (register int i = head[x]; i; i = ed[i].nxt)
{
int to = ed[i].to;
siz[x] += dfs(to);
}
return siz[x];
} inline void dp(int x)
{
for (register int i = head[x]; i; i = ed[i].nxt)
{
int to = ed[i].to;
dp(to);
for (register int t = siz[x] ; t >= ; t --)
{
for (register int j = ; j < t ; j ++)
{
f[x][t] = min(f[x][t], f[x][t-j] + f[to][j] -);
}
}
}
} int main()
{
scanf("%d%d", &n, &m);
for (register int i = ; i < n; i++)
{
int x, y;
scanf("%d%d", &x, &y);
add(x, y);
vis[y]++;
son[x]++;
}
for (register int i = ; i <= n; i++) if (!vis[i]) {root=i;break;}
dfs(root);
memset(f, 0x3f, sizeof f);
for (register int i = ; i <= n; i++) f[i][siz[i]] = , f[i][] = son[i];
dp(root);
int ans = f[root][m];
for (register int i = ; i <= n; i++) ans = min(ans, f[i][m]+);
cout<<ans;
return ;
}

最新文章

  1. MBR结构和DBR结构
  2. C#实现约瑟夫环问题
  3. 网页中的&lt;th&gt;&lt;/th&gt;是什么意思
  4. 什么是web service
  5. _beginThreadex创建多线程解读【转】
  6. 数据库.mdf
  7. React.js入门小案例
  8. Script 代码段
  9. netsh命令
  10. 【session】
  11. js小分享
  12. Nginx+PostgreSQL+Django+UWSGI搭建
  13. javascript定义函数不同方式的区别
  14. Properties工具类
  15. ubuntu更改用户密码
  16. PMP知识点(六)&mdash;&mdash;项目经理权利类型
  17. (91)Wangdao.com第二十四天_Mutation Observer API 突变监视器
  18. Java属性中指定Json的属性名称
  19. Luogu P4169 [Violet]天使玩偶/SJY摆棋子
  20. Android_PullListView

热门文章

  1. 数据库(DDL,DML,DQL、DCL)
  2. Spring 7大模块的解说
  3. 48 (OC)* 适配iPad和iPhone、以及横竖屏适配。
  4. Spring Boot + WebSocket 学习笔记
  5. H5当弹出弹窗遮罩时如何阻止滚动穿透(使用css方式)
  6. Maven 创建项目之简单示例
  7. 转:查看oracle数据库允许的最大连接数和当前连接数
  8. 使用Shell脚本编译运行C++源码 输入输出重定向
  9. eclipse与hadoop集成,运行wordCount1
  10. json与java对象的转换,以及struts2对json的支持,实现ajax技术