题目链接:http://poj.org/problem?id=1947

题意:给n(n<=150)个点的一棵树,求删掉最少边数k使得最后该树只剩下p(1<=p<=n)个节点。(求最小的k)

分析:设dp[u][j]表示以u节点为根的子树保留j个节点删掉最少的边数;则dp[u][j]=min(dp[u][j],dp[u][j-k]+dp[v][k]).初始值dp[u][1]=0.

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 250
#define clr(a) (memset(a,0,sizeof(a)))
using namespace std;
struct edge
{
int next,v;
edge(){}
edge(int v,int next):v(v),next(next){}
}e[N*];
int head[N],tot,n,m;
int dp[N][N];
void addedge(int u,int v)
{
e[tot]=edge(v,head[u]);
head[u]=tot++;
}
void dfs(int u,int fa)
{
dp[u][]=;
for(int i=head[u];~i;i=e[i].next)
{
int v=e[i].v;
if(v==fa)continue;
dfs(v,u);
for(int j=m;j>=;j--)
{
dp[u][j]++;//对于子树u,要保持j个节点不变,必须砍掉该条边去掉子树v
for(int k=;k<j;k++)
dp[u][j]=min(dp[u][j],dp[u][j-k]+dp[v][k]);
}
}
}
int main()
{
int u,v;
while(scanf("%d%d",&n,&m)>)
{
tot=;
memset(head,-,sizeof(head));
memset(dp,0x3f,sizeof(dp));
for(int i=;i<n;i++)
{
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
dfs(,-);
int ans=dp[][m];
for(int i=;i<=n;i++)ans=min(ans,dp[i][m]+);
printf("%d\n",ans);
}
}

最新文章

  1. opencv5-objdetect之级联分类器
  2. (转)Sqlite中INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用
  3. 如何解决android studio 运行时中文乱码的问题
  4. Linux实施一次性任务
  5. 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3.5的详细分析及安装过程
  6. STM32F4系列单片机上使用CUBE配置MBEDTLS实现pem格式公钥导入
  7. 目标检测 anchor 理解笔记
  8. 软件开发者路线图梗概&amp;书摘chapter6
  9. AbstractRoutingDataSource 实现动态切换数据源
  10. vue运行说明
  11. [P3369]普通平衡树(Splay版)
  12. json排序 及替换在字符串中全部替换某字符串
  13. 分散的配置文件VS集中的注册表
  14. FileInputStream与FileOutputStream 复制文件例子代码
  15. 新装iis 页面503错误 DefaultAppPool停止解决方案
  16. DWZ-JUI+UEditor第二次不显示,UEditor异步加载第二次不显示的解决方案
  17. 20145303刘俊谦 《Java程序设计》第十周学习总结
  18. 返回值过长时被nginx截断的解决办法
  19. http.pieplining
  20. bzoj 2286(虚树+树形dp) 虚树模板

热门文章

  1. 六款常用的linux C/C++ IDE
  2. Direct UI 思想阐述(好多相关文章)
  3. 基于visual Studio2013解决面试题之0207单词翻转
  4. 关于wind7重新安装系统后,连接mysql的问题
  5. POJ 2186 Popular Cows (强联通)
  6. Spring的事件处理
  7. 《学习opencv》笔记——矩阵和图像处理——cvMinManLoc,cvMul,cvNot,cvNorm and cvNormalize
  8. Hibernate(五)——经典解析一对一关联映射
  9. 键盘游戏之canvas--用OO方式写
  10. go 冒泡排序