[洛谷P1272] 重建道路

时间:2022-11-20 09:51:38

类型:树形背包

传送门:>Here<

题意:给出一棵树,要求断开$k$条边来分离出一棵有$P$个节点的子树。求最小的$k$

解题思路

和上一题类型相同,但不那么好做了——分离出的一棵子树肯定是在一起的,不能是散的,因此这给dp带来了难度

$dp[u][i][j]$表示节点$u$的子树内,在前$i$棵子树内分离出有$j$个节点的子树,最少断的边。特别需要注意的是,这里的有$j$个节点的子树必须包含节点$u$

想到这个定义以后就不难了,有方程$$dp[u][i][j]=Min\{dp[u][i-1][j-k]+dp[v][numson[v]][k]-2\}$$相当于在前$i-1$棵子树中分离出包含$u$的大小为$j-k$的子树,并且在当前子树分离出$k$的。注意为什么要$-2$,因为这两个部分为了确保独立性,前者肯定会断掉边$(u,v)$,后者也肯定会断掉边$(u,v)$,而现在恰好需要这条边来把两棵子树连起来,因此返还2

一样可以滚动$$dp[u][j]=Min\{dp[u][j-k]+dp[v][k]-2\}$$

初始化:$dp[u][1]=u的入度$ 注意$dp[u][0]$是没有意义的,因此不作处理

Code

/*By DennyQi 2018.8.14*/
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
#define r read()
#define Max(a,b) (((a)>(b)) ? (a) : (b))
#define Min(a,b) (((a)<(b)) ? (a) : (b))
using namespace std;
typedef long long ll;
const int MAXN = ;
const int MAXM = ;
const int INF = ;
inline int read(){
int x = ; int w = ; register int c = getchar();
while(c ^ '-' && (c < '' || c > '')) c = getchar();
if(c == '-') w = -, c = getchar();
while(c >= '' && c <= '') x = (x << ) + (x << ) + c - '', c = getchar(); return x * w;
}
int N,P,ans(INF),x,y,first[MAXM],nxt[MAXM],to[MAXM],cnt,dp[MAXN][MAXN],rd[MAXN];
inline void add(int u, int v){
to[++cnt]=v,nxt[cnt]=first[u],first[u]=cnt;
++rd[u], ++rd[v];
}
inline void DP(int u, int _f){
int v;
for(int i = first[u]; i; i = nxt[i]){
if((v=to[i]) == _f) continue;
DP(v, u);
for(int j = P; j; --j)
for(int k = ; k <= j; ++k)
dp[u][j] = Min(dp[u][j], dp[u][j-k] + dp[v][k] - );
}
}
int main(){
memset(dp,0x3f,sizeof(dp));
N=r,P=r;
for(int i = ; i < N; ++i) x=r,y=r,add(x, y);
for(int i = ; i <= N; ++i) dp[i][] = rd[i];
DP(, -);
for(int i = ; i <= N; ++i) ans = Min(ans, dp[i][P]);
printf("%d", ans);
return ;
}

[洛谷P1272] 重建道路的更多相关文章

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

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

  2. 洛谷 P1272 重建道路&lpar;树形DP&rpar;

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

  3. 洛谷 P1272 重建道路

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

  4. 【洛谷P1272】道路重建

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

  5. 洛谷 P1272 解题报告

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

  6. 洛谷 P5019 铺设道路

    题目描述 春春是一名道路工程师,负责铺设一条长度为 \(n\) 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 \(n\) 块首尾相连的区域,一开始,第 \(i\) 块区域下陷的深度 ...

  7. P1272 重建道路&lpar;树形dp&rpar;

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

  8. 【洛谷P1272】 重建道路

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

  9. P1272 重建道路

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

随机推荐

  1. 跳转到下一个activity

    /* * 第一个跳转代码 */ button.setOnClickListener(new OnClickListener() { @Override public void onClick(View ...

  2. H&period;264中NALU、RBSP、SODB的关系 &lpar;弄清码流结构&rpar;

    NALU:Coded H.264 data is stored or transmitted as a series of packets known as NetworkAbstraction La ...

  3. SQL,学习基础2

    列=字段, 记录=实体  事物日志文件(用来记录数据库的增删情况,扩展名LDF) 数据库文件(但是只有一个是主数据库文件(即用它来启动的),其余为次数据库文件)mdf 数据类型: 整形(整数)——in ...

  4. 一分钟完成MySQL5&period;7安装部署

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1855415 Part ...

  5. How to image a CD&sol;DVD ROM and generate hash value

    Someone ask me how to image a CD/DVD ROM and generate hash value in the same time. A small tool call ...

  6. SNS团队第五次站立会议(2017&period;04&period;26)

    一.当天站立式会议照片 本次会议主要内容:汇报工作进度,根据完成情况调整进度 二.每个人的工作 成员 今天已完成的工作 明天计划完成的工作 罗于婕 完善数据库文件 根据需求完善数据库文件 龚晓婷 编写 ...

  7. 初窥c&plus;&plus;11:lambda函数及其用法

    转载于:点击打开链接 为什么需要lambda函数 匿名函数是许多编程语言都支持的概念,有函数体,没有函数名.1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值.正因为有这样的需求 ...

  8. java 实现的c当中的几道题

    package javastudy; /* * 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, 60分以下的用C表示. */ import jav ...

  9. SharePoint附加内容数据库时报错

    今天遇到一个很奇怪的问题,在sharepoint管理中心中给web application添加内容数据库时报错:The SharePoint database named WSS Content al ...

  10. &lbrack;并查集&rsqb;&lbrack;NOIP2015&rsqb;信息传递

    信息传递 题目描述 有 N 个同学( 编号为 1 到 N) 正在玩一个信息传递的游戏. 在游戏里每人都有一个固定的信息传递对象, 其中,编号为i的同学的信息传递对象是编号为ti的同学. 游戏开始时, ...