P1272
题目描述
一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的。因此,牧场运输系统可以被构建成一棵树。John想要知道另一次地震会造成多严重的破坏。有
些道路一旦被毁坏,就会使一棵含有P(1≤P≤N)个牲口棚的子树和剩余的牲口棚分离,John想知道这些道路的最小数目。
ps:原本想的是\(f[i][j]\)表示以第\(i\)个点为根的子树,出来\(j\)个点的断掉的最小道路
\(f[u][k]=min(f[u][k],f[u][k-j]+f[v][j])\)
然后输出\(min(f[1][p],f[1][size[1]-p])\)
苦于\(N\)次60分以后。我猛然地从题解中发现。我的答案计算写错了。
有可能整棵树中。在某一个子树中就已经将答案取出来了,然后没有记录。
所以我们就应该在计算中即时记录
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using std::min;
const int maxn=160;
struct node
{
int p;
int nxt;
};
node line[maxn<<1];
int head[maxn],tail;
int son[maxn];
int f[maxn][maxn];
int n,p,ans=0x7fffffff;
/*void dfs(int now,int fa)
{
f[now][0]=0;
son[now]=1;
for(int I=head[now];I;I=line[I].nxt)
{
if(line[I].p==fa) continue;
dfs(line[I].p,now);
son[now]+=son[line[I].p];
for(int i=son[now]-1;i>=1;i--)
for(int j=0;j<=son[line[I].p]&&j<=i;j++)
f[now][i]=min(f[now][i],f[now][i-j]+f[line[I].p][j]);
}
f[now][son[now]]=1;
return ;
}*/
void dfs(int now,int fa)
{
son[now]=1;
for(int i=head[now];i;i=line[i].nxt)
if(line[i].p!=fa)
{
dfs(line[i].p,now);
son[now]+=son[line[i].p];
}
f[now][0]=0;
f[now][son[now]]=1;
}
void Dfs(int now,int fa)
{
for(int I=head[now];I;I=line[I].nxt)
{
if(line[I].p==fa) continue;
Dfs(line[I].p,now);
for(int i=son[now]-1;i;i--)
for(int j=0;j<=i;j++)
f[now][i]=min(f[now][i],f[now][i-j]+f[line[I].p][j]);
}
if(son[now]>=p)
ans=min(ans,f[now][son[now]-p]+f[now][son[now]]);
}
void add(int a,int b)
{
line[++tail].p=b;
line[tail].nxt=head[a];
head[a]=tail;
}
int main()
{
memset(f,1,sizeof(f));
scanf("%d%d",&n,&p);
int a,b;
for(int i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
dfs(1,0);
f[1][0]=f[1][son[1]]=0;
Dfs(1,0);
printf("%d",ans);
}
P1272的更多相关文章
- 洛谷 P1272 解题报告
P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...
- 洛谷 P1272 重建道路 解题报告
P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...
- P1272 重建道路(树形dp)
P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...
- 洛谷 P1272 重建道路(树形DP)
P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...
- [洛谷P1272] 重建道路
类型:树形背包 传送门:>Here< 题意:给出一棵树,要求断开$k$条边来分离出一棵有$P$个节点的子树.求最小的$k$ 解题思路 和上一题类型相同,但不那么好做了——分离出的一棵子树肯 ...
- P1272 重建道路
题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的.因此,牧场运输系 ...
- 【洛谷P1272】道路重建
题目大意:给定一个 N 个节点的树,求至少剪掉多少条边才能使得从树中分离出一个大小为 M 的子树. 题解:考虑树形 dp,定义 \(dp[u][i][t]\) 为以 u 为根节点与前 i 个子节点构成 ...
- luogu P1272 重建道路
嘟嘟嘟 这好像是一种树上背包. 我们令dp[i][j] 表示在 i 所在的子树中(包括节点 i)分离出一个大小为 j 的子树最少需割多少条边. 那么转移方程就是 dp[u][j] = min(dp[u ...
- 洛谷 P1272 重建道路
题目链接 题解 树形dp \(f_{i, j}\)表示以\(i\)为根的子树切出联通块大小为\(j\)的最小答案 显然\(f[i][1]\)为与\(i\)连的边数 设\(v\)是\(u\)的儿子 那么 ...
随机推荐
- c#高级写法
Linq的参考资料:https://www.cnblogs.com/liqingwen/p/5801249.html 1.判断str字符串中的逗号个数 string str = "1,2,3 ...
- Windows 下推荐软件
神器 Dism++ Quicker(效率工具) Bandizip 火绒安全软件 Everyting(搜索神器并支持http远程连接) Xmanager VMware Workstation IDMan ...
- [转]JS组件系列——BootstrapTable 行内编辑解决方案:x-editable
本文转自:http://www.cnblogs.com/landeanfen/p/5821192.html 阅读目录 一.x-editable组件介绍 二.bootstrapTable行内编辑初始方案 ...
- 如何优化VMWare虚拟机的运行速度(转)
虚拟机是个好东西,但是对电脑有一定的要求.尤其对做工控的来说都需要安装一些大型的软件(其中WINCC最难装,对系统要求较高.而且像WIN 7 64位的就别想装上去了,如果改系统后那4G以上的内存不就浪 ...
- sql查询时,根据特定的条件给表的某一个字段赋值
先讲一下需要这个需求的情景: 这是一个招聘求职项目遇到的一个问题.个人A向公司B的职位投递简历后,公司B会收到个人A的简历;但是A投递后把简历删除,公司收到的简历信箱 还有这个简历,但却不能看了. 原 ...
- mysql 字符串转换呈毫秒值
SELECT CEIL((UNIX_TIMESTAMP('2011-05-31 23:59:59') - UNIX_TIMESTAMP('2011-05-31 00:59:59'))/1000/60/ ...
- CSS动画效果
CSS变形效果 Transform translate:平移 translate(x,y) translateX(x) translateY(y)相对于元素原始位置平移. scale:缩放 大于1放大 ...
- JavaScript (预热)
希望把某个元素移除你的视线: 1.display:none; 显示为无 2.visibility:hidden; 隐藏 3.width\height; 4.透明度: 5.left\top; 6.拿 ...
- windows RT开发笔记:WinRT DLL及其调用研究
一. 几个概念: WinRT : Windows Runtime, windows运行时.创建Windows运行时(WinRT)是为了在Windows上给用户提供一种流畅且安全的应用体验.WinRT会 ...
- dwr2.0版本的demo
谈起DWR,这个东西在上学的时候接触过,但工作之后就再也没有用过. 对DWR的印象是不手写AJAX,使用JavaScript调用java后台的代码,就如同调用前台代码一样. ...