博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1947 Rebuilding Roads(树形DP)
阅读量:4035 次
发布时间:2019-05-24

本文共 747 字,大约阅读时间需要 2 分钟。

1、

2、题目大意:

已知一棵树有n个结点,现在要删除部分边,使得有一棵独立的子树上的结点个数为p个,求满足条件下,最少删除几条边

分析:

这是一道树形DP,对于第k条边来说要么删除要么不删除

dp[i][j]表示以i为根的树有j个结点的最小代价(最少删除的边数),

dp[u][j]=max(dp[u][j]+1,dp[u][j-k]+dp[v][k])

要是删除第k条边那么dp[u][j]=dp[u][j]+1,不删除第K条边就等于dp[u][j-k]+dp[v][k]

3、AC代码:

#include
#include
#include
#include
using namespace std;#define N 155#define INF 0x7ffffffvector
adj[N];int in[N],m,n;int dp[N][N];int tmp;void dfs(int u){ for(int i=0; i<=n; i++) dp[u][i]=INF; dp[u][1]=0; for(int i=0; i
=0; j--) { tmp=dp[u][j]+1; for(int k=0; k<=j; k++) { tmp=min(tmp,dp[u][j-k]+dp[v][k]); } dp[u][j]=tmp; } }}int main(){ int a,b,s; scanf("%d%d",&n,&m); memset(in,0,sizeof(in)); for(int i=1; i

 

转载地址:http://trddi.baihongyu.com/

你可能感兴趣的文章
如何用好碎片化时间,让思维更有效率?
查看>>
No.147 - LeetCode1108
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql create database新建utf8mb4 数据库
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql drop table (删除表)
查看>>
mysql:sql truncate (清除表数据)
查看>>
scrapy:xpath string(.)非常注意问题
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
YUV420只绘制Y通道
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt5 everywhere编译完成后,找不到qmake
查看>>