POJ1947 Rebuilding Roads(树形DP)
题目大概是给一棵树,问最少删几条边可以出现一个包含点数为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)的更多相关文章
- POJ1947 - Rebuilding Roads(树形DP)
题目大意 给定一棵n个结点的树,问最少需要删除多少条边使得某棵子树的结点个数为p 题解 很经典的树形DP~~~直接上方程吧 dp[u][j]=min(dp[u][j],dp[u][j-k]+dp[v] ...
- POJ 1947 Rebuilding Roads 树形DP
Rebuilding Roads Description The cows have reconstructed Farmer John's farm, with its N barns (1 & ...
- POJ 1947 Rebuilding Roads 树形dp 难度:2
Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9105 Accepted: 4122 ...
- DP Intro - poj 1947 Rebuilding Roads(树形DP)
版权声明:本文为博主原创文章,未经博主允许不得转载. Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- POJ1947 Rebuilding Roads[树形背包]
Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 11495 Accepted: 5276 ...
- [USACO2002][poj1947]Rebuilding Roads(树形dp)
Rebuilding RoadsTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 8589 Accepted: 3854Descrip ...
- POJ1947 Rebuilding Roads
Description The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, n ...
- [poj 1947] Rebuilding Roads 树形DP
Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10653 Accepted: 4884 Des ...
- POJ 1947 Rebuilding Road(树形DP)
Description The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, n ...
随机推荐
- Android Bitmap 全面解析(四)图片处理效果对比 ...
对比对象: UIL Volley 官方教程中的方法(此系列教程一里介绍的,ImageLoader的处理方法和官方的差不多) -------------------------------------- ...
- 百度图片爬虫-python版
self.browser=imitate_browser.BrowserBase() self.chance=0 self.chanc ...
- Linux_DHCP服务搭建
Linux网络参数的设置 1. 修改主机名 # vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=bj.com 2. 修 ...
- [ruby on rails] 跟我学之(4)路由映射
前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...
- 【SpringMVC】SpringMVC系列8之Servlet API 作为入参
8.Servlet API 作为入参 8.1.概述 MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数: HttpServletRequest HttpServletRes ...
- petri网学习心得
本文转载自duxw,如给您带来不便之处,请联系博主. 1.Petri网书籍:<petri网导论>,吴哲辉 非常适合初学者.概念清晰,容易理解. 2.工作流书籍:<Workflow M ...
- 67. 总结篇:面试中随机数"等概率"vs"不等概率"生成问题[random generator with equal or unequal probability]
[本文链接] http://www.cnblogs.com/hellogiser/p/random-generator-with-equal-or-unequal-probability.html 1 ...
- 跨域请求获取Solr json检索结果并高亮显示
Solr提供了json格式的检索结果,然而在跨域的情况下如何调用呢?我们可以利用jquery提供的jsonp的方式获取Solr检索结果. <script type="text/java ...
- spring无法扫描jar包的问题
在日常开发中往往会对公共的模块打包发布,然后调用公共包的内容.然而,最近对公司的公共模块进行整理发布后.spring却无法扫描到相应的bean.折腾了好久,最终发现是认识上的误区. 2015-11-1 ...
- hdu3555
基本的数位dp #include <cstdio> #include <cstring> using namespace std; #define D(x) x ; long ...