POJ 1947 Rebuilding Roads 树形dp 难度:2
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 9105 | Accepted: 4122 |
Description
Farmer John wants to know how much damage another earthquake could do. He wants to know the minimum number of roads whose destruction would isolate a subtree of exactly P (1 <= P <= N) barns from the rest of the barns.
Input
* Lines 2..N: N-1 lines, each with two integers I and J. Node I is node J's parent in the tree of roads.
Output
Sample Input
11 6
1 2
1 3
1 4
1 5
2 6
2 7
2 8
4 9
4 10
4 11
Sample Output
2
Hint
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=152;
const int inf=0x7ffff;
int dp[maxn][maxn];
int des[maxn];//中间缓存防止自身更新
int e[maxn][maxn];
int len[maxn];//建图
int lef[maxn];//子节点+自身个数
int n,p;
void dfs(int s){
lef[s]=1;//自身肯定算一个,子节点还没加上
dp[s][1]=0;//这个时候只有不切一种可能
if(len[s]==0){return ;}//没必要刻意 for(int i=0;i<len[s];i++){
int t=e[s][i];
dfs(t);
fill(des,des+n+1,inf);//初始化缓存
for(int k=1;k<=lef[s];k++){
des[k]=dp[s][k]+1;//切
}
for(int k=1;k<=lef[s];k++){
for(int j=1;j<=lef[t];j++){
des[k+j]=min(dp[s][k]+dp[t][j],des[k+j]);//不切
}
}
lef[s]+=lef[t];//加上这一枝
for(int k=1;k<=lef[s];k++){
dp[s][k]=des[k];//从缓存中取状态
}
dp[s][lef[s]]=0;//不需要
}
}
int main(){
scanf("%d%d",&n,&p);
memset(len,0,sizeof(len));
for(int i=1;i<=n;i++)fill(dp[i]+1,dp[i]+n+1,inf);
for(int i=2;i<=n;i++){
int f,t;
scanf("%d%d",&f,&t);
e[f][len[f]++]=t;
}
dfs(1);
int ans=dp[1][p];//1是根节点分离它不需要切
for(int i=2;i<=n;i++)ans=min(ans,dp[i][p]+1);//非根子树都要切
// printdp();
printf("%d\n",ans); return 0;
}
POJ 1947 Rebuilding Roads 树形dp 难度:2的更多相关文章
- POJ 1947 Rebuilding Roads 树形DP
Rebuilding Roads Description The cows have reconstructed Farmer John's farm, with its N barns (1 & ...
- DP Intro - poj 1947 Rebuilding Roads(树形DP)
版权声明:本文为博主原创文章,未经博主允许不得转载. Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- [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 ...
- POJ 1947 Rebuilding Roads (树dp + 背包思想)
题目链接:http://poj.org/problem?id=1947 一共有n个节点,要求减去最少的边,行号剩下p个节点.问你去掉的最少边数. dp[u][j]表示u为子树根,且得到j个节点最少减去 ...
- 树形dp(poj 1947 Rebuilding Roads )
题意: 有n个点组成一棵树,问至少要删除多少条边才能获得一棵有p个结点的子树? 思路: 设dp[i][k]为以i为根,生成节点数为k的子树,所需剪掉的边数. dp[i][1] = total(i.so ...
- POJ 1947 Rebuilding Roads
树形DP..... Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8188 Accepted: ...
- 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)
题目链接 题意 : 给你一棵树,问你至少断掉几条边能够得到有p个点的子树. 思路 : dp[i][j]代表的是以i为根的子树有j个节点.dp[u][i] = dp[u][j]+dp[son][i-j] ...
随机推荐
- USACO 1.3 Ski Course Design - 暴力
Ski Course Design Farmer John has N hills on his farm (1 <= N <= 1,000), each with an integer ...
- 螺旋折线|2018年蓝桥杯B组题解析第七题-fishers
标题:螺旋折线 如图p1.png所示的螺旋折线经过平面上所有整点恰好一次. 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度. 例如dis(0, ...
- Adobe Reader 2019 Offline Installer, Free Download - Best PDF Reader
https://ridnt-b.blogspot.com/2018/01/adobe-reader-2018-free-download.html http://ardownload.adobe.co ...
- ubuntu16.04上安装Jenkins,获取登陆密码
sudo cat /usr/share/tomcat7/.jenkins/secrets/initialAdminPassword
- ubuntu server 16.04(amd 64) 配置网桥,多网卡使用激活
安装了Ubuntu16.04的server版本,结果进入系统输入ifconfig后发现,只有一个网卡enp1s0,还有一个网络回路lo,ifconfig -a 发现其实一共有四个网卡,enp1s0,e ...
- python 散列表查找
class HashTable: def __init__(self, size): self.elem = [None for i in range(size)] self.count = size ...
- IIS中发布后出现Could not load file or assembly'System.Data.SQLite.dll' or one of its depedencies
[问题]在我本机的开发环境c#连接sqlite3没有问题,可是release版本移植到其他的机器就提示Could not load file or assembly'System.Data.SQLit ...
- socket+django
1.socket 网络上任意两个程序之间要进行通信,需要依靠socket(端口).socket封装了TCP/IP协议,让网络通信基于TCP/IP协议的形式实现. socket可以翻译为插座,那么一个服 ...
- m_Orchestrate learning system---三十一、模板和需求的关系
m_Orchestrate learning system---三十一.模板和需求的关系 一.总结 一句话总结:模板为了适应广大用户,有很多功能样式,但是,你需要的只是部分,所以删掉不需要的,如果有需 ...
- CentOS Redhat Linux安装 Oracle Client 的注意点
1) 安装文件要拷贝到本地文件系统执行 2) 虽然不知道 libXmu是什么,但是安装之后,关联包安装了许多,感觉很省心 yum install libXmu.i686 3) 还有找不到的包的话,用 ...