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的更多相关文章

  1. 洛谷 P1272 解题报告

    P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...

  2. 洛谷 P1272 重建道路 解题报告

    P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...

  3. P1272 重建道路(树形dp)

    P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...

  4. 洛谷 P1272 重建道路(树形DP)

    P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...

  5. [洛谷P1272] 重建道路

    类型:树形背包 传送门:>Here< 题意:给出一棵树,要求断开$k$条边来分离出一棵有$P$个节点的子树.求最小的$k$ 解题思路 和上一题类型相同,但不那么好做了——分离出的一棵子树肯 ...

  6. P1272 重建道路

    题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的.因此,牧场运输系 ...

  7. 【洛谷P1272】道路重建

    题目大意:给定一个 N 个节点的树,求至少剪掉多少条边才能使得从树中分离出一个大小为 M 的子树. 题解:考虑树形 dp,定义 \(dp[u][i][t]\) 为以 u 为根节点与前 i 个子节点构成 ...

  8. luogu P1272 重建道路

    嘟嘟嘟 这好像是一种树上背包. 我们令dp[i][j] 表示在 i 所在的子树中(包括节点 i)分离出一个大小为 j 的子树最少需割多少条边. 那么转移方程就是 dp[u][j] = min(dp[u ...

  9. 洛谷 P1272 重建道路

    题目链接 题解 树形dp \(f_{i, j}\)表示以\(i\)为根的子树切出联通块大小为\(j\)的最小答案 显然\(f[i][1]\)为与\(i\)连的边数 设\(v\)是\(u\)的儿子 那么 ...

随机推荐

  1. zookeeper在windows下的伪集群模式

    参考:zookeeper在windows下的伪集群模式 踩到的坑: 注意windows下路径需要使用\ dataDir=D:\Program Files\Java\zookeeper-3.4.10-c ...

  2. VMware虚拟机上安装xp操作系统

    前提:安装好虚拟机 资料:windows xp 的虚拟机操作系统 上面这个文件最好保存好一份,防止以后虚拟机用坏了可以重新安装. 1 新建目录D:\virtual machine\vSQL\vm将我们 ...

  3. FFmpegInterop 库在 Windows 10 应用中的编译使用

    FFmpegInterop 简介 FFmpegInterop 是微软推出的封装 FFmpeg 的一个开源库,旨在方便在 Windows 10.Windows 8.1 以及 Windows Phone ...

  4. 一个C#后台调用接口的例子

    string url = ConfigurationSettings.AppSettings["resurl"].ToString(); var wc = new WebClien ...

  5. bootstrap dialog对话框,完成操作提示框

    1. 依赖文件: bootstrap.js bootstrap-dialog.js bootstrap.css bootstrap-dialog.css 2.代码 BootstrapDialog.co ...

  6. JPA 使用 Specification 复杂查询和 Criteria 查询

    转自:https://blog.wuwii.com/jpa-specification.html 前言 JPA 给我们提供了基础的 CURD 的功能,并且用起来也是特别的方便,基本都是一行代码完成各种 ...

  7. Jmeter使用CSV Data Set Config参数化数据不重复的多次循环执行(实现多用户多次抽奖功能)

    Jmeter中使用CSV Data Set Config参数化不重复数据执行N遍 要求: 今天要测试上千条数据,且每条数据要求执行多次,(模拟多用户多次抽奖) 1.用户id有175个,且没有任何排序规 ...

  8. javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法

    今天不用eclipse.myeclipse等开发工具,纯手写JSP页面(有点作死)时突然出现以前从来没遇到过的问题,报错如下: HTTP Status 500 - java.lang.NoClassD ...

  9. visual studio 调试 不进断点 断点失效 提示当前不会命中该断点等问题解决

    1.首先看一下  当前调试模式是否为debug 2. 点击[调试]>[选项和设置] 将[要求源文件与原始文件完全匹配]勾选掉 3.点击调试的最后一个选项 点击[web] 将调试器内部勾选上需要测 ...

  10. Windows漏洞利用技术概述

    Windows漏洞利用技术总结 1. 前言 本文是我对漏洞利用技术的学习总结,也是自己践行QAD (Questions.Answer.Discussions)的一次实践.本文通过阅读几位大牛的文章.演 ...