【洛谷1272】重建道路(树形DP)
来源:互联网 发布:奇迹归来宠物进阶数据 编辑:程序博客网 时间:2024/04/28 00:28
题目描述:
农夫John的重建道路传送门
算法:
树形DP + 背包,大概做法容易想出,但可能卡在细节上
做法:
设 f[u][i] 表示在 u 的子树中,选 i 个结点(必须包括 u)时最少去几条边。转移方程:
f[u][1]=du[u]−(fa[u]!=0)
f[u][i]=minj=1m(f[u][j]+f[v][i−j]−1)
统计答案:
ans=minu=1n(f[u][m]+(fa[u]!=0))
关键是细节搞不懂
当只选 u 时,要去的边数为 du[u](u 的度)。在上面的公式中,为什么要 -1 呢:当 u 与 v 连接时,u 与 v 之间的边不会被删去,而 f[u][j] 中把这条边删掉了,所以现在要加回来。统计答案时为什么 f[u][m]+(fa[u]!=0) 呢:因为 f[u][m] 没去掉 u 与 fa[u] 连接的边,统计时要加上。
就这么多了。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int N=160;int n, mi, m;int head[N], fa[N];struct Edge{ int to, next;}e[N<<1];inline void add(int u, int v){ Edge E = {v,head[u]}; e[++mi] = E; head[u] = mi;}int find(int x){ if(x==fa[x]) return x; return fa[x]=find(fa[x]);}const int INF=1000000000;int ans=INF;int f[N][N], du[N];void dfs(int u, int fa){ f[u][1] = du[u]-(fa!=0); for(int p=head[u], i, j, v; p; p=e[p].next){ v=e[p].to; dfs(v,u); for(i=m; i; --i){ for(j=1; j<i; ++j){ f[u][i] = min(f[u][i], f[u][j]+f[v][i-j]-1); // -1 细节 } } } ans = min(ans, f[u][m]+(fa!=0)); // 分类讨论 细节 }int main(){ scanf("%d%d",&n, &m); for(int i=1; i<=n; ++i) fa[i]=i; for(int i=1, u, v, fu, fv; i<n; ++i){ scanf("%d%d", &u, &v); add(u, v); du[u]++; du[v]++; fu=find(u); fv=find(v); fa[fv]=fu; // 这仅仅是为了不存无用边 } memset(f,0x3f,sizeof(f)); dfs(find(1),0); printf("%d\n",ans); while(1);}
阅读全文
0 0
- 【洛谷1272】重建道路(树形DP)
- 树形DP 洛谷P1272 道路重建
- 洛谷 p1272 重建道路 树形dp
- 一、树形dp(3)重建道路
- [luogu1272]重建道路(树形dp)
- [BZOJ2435][Noi2011]道路修建(树形dp)
- BZOJ1063:道路设计(树形dp)
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷P3905 道路重建
- 【NOI2011T4】道路修建-树形DP
- bzoj 1063: [Noi2008]道路设计 (树形dp)
- 【BZOJ2435】【Noi2011】道路修建 树形DP
- bzoj1063: [Noi2008]道路设计 树形dp
- bzoj 1063: [Noi2008]道路设计 树形dp
- Fiddler实现手机抓包——小白入门
- 手把手教你新装的linux之后的必要配置(9)
- JavaScript动画效果 opacity 透明度变化
- 分享一个ViewPager广告自动轮播
- Java.lang.NullPointerException
- 【洛谷1272】重建道路(树形DP)
- layui栅格系统
- O
- C++ Primer Plus第五版 第五章 编程练习答案
- oracle 日期维表 原始版本 带注解
- Java互联网架构-Spring分布式事务
- 如何生成代码
- java.lang.IllegalArgumentException
- spring cloud + spring boot + springmvc+mybatis分布式微服务云架构