题目大概是给一棵树,问最少删几条边可以出现一个包含点数为p的连通块。

任何一个连通块都是某棵根属于连通块的子树的上面一部分,所以容易想到用树形DP解决:

  • dp[u][k]表示以u为根的子树中,包含根的大小k的连通块最少的删边数
  • 要求答案就是min(dp[u][p],min(dp[v][p]+1)),u是整棵树的根,v是其他结点
  • 转移从若干个子树各自选择要提供几个k转移,不过指数级时间复杂度,当然又是树上背包了。。

转移好烦,写得我好累好累。。还好1A了。。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF (1<<29)
#define MAXN 155
struct Edge{
int u,v,next;
}edge[MAXN];
int NE,head[MAXN];
void addEdge(int u,int v){
edge[NE].u=u; edge[NE].v=v; edge[NE].next=head[u];
head[u]=NE++;
}
int d[MAXN][MAXN],size[MAXN],son[MAXN];
void getSize(int u){
size[u]=;
son[u]=;
for(int i=head[u]; i!=-; i=edge[i].next){
int v=edge[i].v;
getSize(v);
size[u]+=size[v];
++son[u];
}
}
void dp(int u){
d[u][size[u]]=;
d[u][]=;
bool first=;
for(int i=head[u]; i!=-; i=edge[i].next){
int v=edge[i].v;
dp(v);
++d[u][];
if(first){
for(int j=; j<=size[v]; ++j) d[u][j+]=d[v][j];
first=;
}else{
for(int j=size[u]-; j>=; --j){
++d[u][j+];
for(int k=; k<=min(j,size[v]); ++k){
d[u][j+]=min(d[u][j+],d[v][k]+d[u][j+-k]);
}
}
}
}
}
int main(){
for(int i=; i<MAXN; ++i){
for(int j=; j<MAXN; ++j) d[i][j]=INF;
}
memset(head,-,sizeof(head));
int n,p,a,b;
scanf("%d%d",&n,&p);
int deg[MAXN]={};
for(int i=; i<n; ++i){
scanf("%d%d",&a,&b);
addEdge(a,b);
++deg[b];
}
int root;
for(int i=; i<=n; ++i){
if(deg[i]==) root=i;
}
getSize(root);
dp(root);
int res=INF;
for(int i=; i<=n; ++i){
if(root==i) res=min(res,d[i][p]);
else res=min(res,d[i][p]+);
}
printf("%d",res);
return ;
}

POJ1947 Rebuilding Roads(树形DP)的更多相关文章

  1. POJ1947 - Rebuilding Roads(树形DP)

    题目大意 给定一棵n个结点的树,问最少需要删除多少条边使得某棵子树的结点个数为p 题解 很经典的树形DP~~~直接上方程吧 dp[u][j]=min(dp[u][j],dp[u][j-k]+dp[v] ...

  2. POJ 1947 Rebuilding Roads 树形DP

    Rebuilding Roads   Description The cows have reconstructed Farmer John's farm, with its N barns (1 & ...

  3. POJ 1947 Rebuilding Roads 树形dp 难度:2

    Rebuilding Roads Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 9105   Accepted: 4122 ...

  4. DP Intro - poj 1947 Rebuilding Roads(树形DP)

    版权声明:本文为博主原创文章,未经博主允许不得转载. Rebuilding Roads Time Limit: 1000MS   Memory Limit: 30000K Total Submissi ...

  5. POJ1947 Rebuilding Roads[树形背包]

    Rebuilding Roads Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11495   Accepted: 5276 ...

  6. [USACO2002][poj1947]Rebuilding Roads(树形dp)

    Rebuilding RoadsTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 8589 Accepted: 3854Descrip ...

  7. POJ1947 Rebuilding Roads

    Description The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, n ...

  8. [poj 1947] Rebuilding Roads 树形DP

    Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10653 Accepted: 4884 Des ...

  9. POJ 1947 Rebuilding Road(树形DP)

    Description The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, n ...

随机推荐

  1. MySQL 5.6 Warning: Using a password on the command line interface can be insecure

    MySQL 5.6 在命令行输入密码,就会提示这些安全警告信息. Warning: Using a password on the command line interface can be inse ...

  2. Android 遍历界面控件

    //遍历界面上的控件 fubin.pan LinearLayout sLinerLayout = (LinearLayout)findViewById(R.id.layout_scr); for (i ...

  3. Unity3D如何制作透贴和使用透贴模型

    http://momowing.diandian.com/post/2012-10-25/40040842845 Unity3D如何制作透贴和使用透贴模型??解决办法!!! 问题: 同事通过3DMAX ...

  4. ssh面试题

    ssh面试题  创建时间: 2015-8-12 22:37 来源: http://wenku.baidu.com/link?url=cw1B46f98hAde0kmr3J-wv7PpklZJRmf6I ...

  5. Python操作Mysql实例代码教程在线版(查询手册)

    本文介绍了Python操作MYSQL.执行SQL语句.获取结果集.遍历结果集.取得某个字段.获取表字段名.将图片插入数据库.执行事务等各种代码实例和详细介绍,代码居多,是一桌丰盛唯美的代码大餐   实 ...

  6. Kmin

    Kmin of Array [本文链接] http://www.cnblogs.com/hellogiser/p/kmin-of-array.html [代码]  C++ Code  12345678 ...

  7. 57. 数对之差的最大值:4种方法详解与总结[maximum difference of array]

    [本文链接] http://www.cnblogs.com/hellogiser/p/maximum-difference-of-array.html [题目] 在数组中,数字减去它右边的数字得到一个 ...

  8. spring无法扫描jar包的问题

    在日常开发中往往会对公共的模块打包发布,然后调用公共包的内容.然而,最近对公司的公共模块进行整理发布后.spring却无法扫描到相应的bean.折腾了好久,最终发现是认识上的误区. 2015-11-1 ...

  9. TokuDB的特点验证

    随着数据量越来越大,越来越频繁的遇到需要进行结构拆分的情况,每一次拆分都耗时很久,并且需要多方配合,非常的不想搞这个事情.于是在@zolker的提醒下想到了13年开源tokuDB,来解决我们迫在眉睫的 ...

  10. 岛屿(洛谷 U5399)

    题目背景 放假了,Lkw和mm到岛上旅游.阳光明媚,风景秀丽.正当Lkw和mm享受眼前这旖旎的风光时,突降大雨,小岛上开始积水,没过几分钟,水便快要触及膝盖.Lkw和mm意识到了事态的严重性,赶紧向高 ...