#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n, p, rt, f[155][155], siz[155];
int e, to[155], h[155], nx[155];
bool vis[155];
void dfs(int u){
siz[u] = 1;
int k = 1;
for(int i = h[u]; i; i = nx[i]){
k++;
dfs(to[i]);
siz[u] += siz[to[i]];
}
f[u][siz[u]] = 0;
f[u][1] = k;
}
void dp(int u){
if(siz[u] == 1) return;
for(int i = h[u]; i; i = nx[i]){
int v = to[i];
dp(v);
for(int j = siz[u]; j > 0; j--){
f[u][j] = min(f[u][j], f[u][j+siz[v]]+1);
for(int k = siz[v]; k > 0; k--){
f[u][j] = min(f[u][j], f[u][j+siz[v]-k]+f[v][k]);
}
}
}
}
int main()
{
while(scanf("%d %d", &n, &p)){
memset(f, 0x3f, sizeof f);
memset(h, 0, sizeof h);
memset(to, 0, sizeof to);
memset(siz, 0, sizeof siz);
memset(nx, 0, sizeof nx);
memset(vis, 0, sizeof vis);
for(int i = 1; i < n; i++){
int u, v;
scanf("%d %d", &u, &v);
to[++e] = v;
nx[e] = h[u];
h[u] = e;
vis[v] = 1;
}
for(int i = 1; i <= n; i++)
if(!vis[i]){rt = i; break;}
dfs(rt);
dp(rt);
int ans = 1<<30;
for(int i = 1; i <= n; i++)
if(siz[i] >= p) ans = min(ans, f[i][p]+(i!=rt));
printf("%d\n", ans);
}
return 0;
}
博主你好,
我最近也在做IM中的RichEdit,现在RichEdit支持HTML Format剪贴版格式的复制粘贴不知该如何解决,想请教一下,我的QQ:47102138
re: 应该如何读博士(转)[未登录] sky 2010-09-29 16:27
几个重点分析:
1、选择实地做学问的实验室,有很好的合作氛围和团队意识感觉,重视研究轻视个人崇拜;
2、国内的学术气氛不好,利益色彩太严重。国家的科研项目还大大讲利润,实在可悲;
3、在可悲中发展,希望大家有一天能摒弃这种气氛,团结一致革新新的研究氛围;
4、钱不是最重要的,心灵的轻松和创新的发现会令你心旷神怡
re: C++虚函数表解析(转)[未登录] sky 2009-05-30 16:18
问一个问题,(int*)(&b) 得到的是虚拟函数表的位置么?怎么感觉是指向虚拟函数表的指针的位置呢? *(int*)(&b) 才是虚拟函数表的位置吧?
re: vc加载jpg图片的方法[未登录] sky 2009-04-09 11:13
你好,有两个问题,第一个是,在第一段代码中,m_IsShow = TRUE;
是什么意思?这是什么类型的变量,还是控件声明的变量.
第二个问题,是第二段代码中,CComQIPtr<IPicture> m_picture;
是什么意思?使用它需要加载什么文件,我用的时候它出现未定义的错误,请问,怎么定义它?
爱美之心,人皆有之,可是个人认为更重要的其实是一颗真挚的心和人格的魅力.平凡没有什么不好,有时候能够平凡也是一种幸福.
"作为一个女孩,如果你不漂亮,就意味着你要比其他人付出更多努力去得到幸福",其实每个人都要肯付出和争取,幸福才会来敲门,谁都不例外.