ZOJ 3805 (树形DP)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5337
题目大意:方块连接,呈树形。每个方块有两种接法,一种接在父块边上,宽度+1,一种接在父块上面,宽度+0。且一个母块最多有2个子块。问全局的宽度最小是多少。
解题思路:
对于一个方块,就两种接法。
设dp[i][0]=0,表示接在父块上面。
dp[i][1]=1,表示接在父块边上。
对于一个父块,如果没有子块,宽度不变。
如果有一个子块,肯定接在上面,加上子块的宽度。
如果有两个子块,则有两种解法,max(左1上2),max(左2上1), 注意这里两个子块不是加起来,因为只要把管子伸长,让两个子块相互重叠掉一部分宽度,所以取max
那么接这两个子块就得加上这两种解法的较小值。(min)
最后结果是dp[1][1],和dp[1][0]没关系,因为1块肯定要占一个宽度。
#include "cstdio"
#include "iostream"
#include "cstring"
using namespace std;
#define maxn 10005
struct Edge
{
int next,to;
}e[maxn];
int dp[maxn][],head[maxn],tol;
void addedge(int u,int v)
{
e[tol].to=v;
e[tol].next=head[u];
head[u]=tol++;
}
void dfs(int root)
{
int cnt=,l1=,l2=,r1=,r2=;
dp[root][]=,dp[root][]=;
for(int a=head[root];a!=-;a=e[a].next) dfs(e[a].to);
for(int a=head[root];a!=-;a=e[a].next)
{
int t=e[a].to;
if(!cnt) {l1=dp[t][],l2=dp[t][];}
else {r1=dp[t][],r2=dp[t][];}
cnt++;
}
if(!cnt) return;
else if(cnt==) {dp[root][]+=l1;dp[root][]+=l1;}
else
{
int a=max(l1,r2),b=max(l2,r1);
dp[root][]+=min(a,b);dp[root][]+=min(a,b);
}
}
int main()
{
//freopen("in.txt","r",stdin);
int n,u;
while(scanf("%d",&n)!=EOF)
{
memset(head,-,sizeof(head));
tol=;
for(int i=;i<=n;i++)
{
scanf("%d",&u);
addedge(u,i);
}
dfs();
printf("%d\n",dp[][]);
}
}
| 3808409 | 2014-10-20 17:37:23 | Accepted | 3805 | C++ | 800 | 468 | Physcal |
ZOJ 3805 (树形DP)的更多相关文章
- ZOJ 3626(树形DP+背包+边cost)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3626 题目大意:树中取点.每过一条边有一定cost,且最后要回 ...
- ZOJ 3201 树形dp+背包(简单题)
#include<cstdio> #include<vector> #include<cstring> #include<iostream> using ...
- Nuclear Power Plant ZOJ - 3840 树形dp
There are N (1 ≤ N ≤ 105) cities on land, and there are N - 1 wires connecting the cities. Therefore ...
- ZOJ 3188 ZOJ 3188 Treeland Exhibition(树形DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3278 题意:给出一棵树,找出一个不大于长度为m的链,使得其他点到该链 ...
- 2014 Super Training #9 E Destroy --树的直径+树形DP
原题: ZOJ 3684 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3684 题意: 给你一棵树,树的根是树的中心(到其 ...
- 【转】【DP_树形DP专辑】【9月9最新更新】【from zeroclock's blog】
树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树.三叉树.静态搜索树.AV ...
- 【DP_树形DP专题】题单总结
转载自 http://blog.csdn.net/woshi250hua/article/details/7644959#t2 题单:http://vjudge.net/contest/123963# ...
- 算法笔记--树的直径 && 树形dp && 虚树 && 树分治 && 树上差分 && 树链剖分
树的直径: 利用了树的直径的一个性质:距某个点最远的叶子节点一定是树的某一条直径的端点. 先从任意一顶点a出发,bfs找到离它最远的一个叶子顶点b,然后再从b出发bfs找到离b最远的顶点c,那么b和c ...
- poj3417 LCA + 树形dp
Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4478 Accepted: 1292 Descripti ...
随机推荐
- each-Select
While Ruby’s each method is useful, it also comes with an awesome extended family of methods that ar ...
- delphi 2007 远程调试
Remote debugging lets you debug a RAD Studio application running on a remote computer. Once the remo ...
- Combination Sum | & || & ||| & IV
Combination Sum | Given a set of candidate numbers (C) and a target number (T), find all unique comb ...
- 在SharePoint 2010 母版页里添加自定义用户控件
在SharePoint 2010 母版页里添加自定义用户控件(译) 使用自定义用户控件的好处: 1.容易部署:2.易于控制显示或隐藏. (在使用的过程中)可能要面对的问题是:如何在用户控件里使用Sha ...
- PHP 调试用函数
2014年7月4日 10:27:59 有些系统函数可以在调试程序时救急用: get_class_methods(); get_class_vars(); get_object_vars(); get_ ...
- 在eclipse中配置一个简单的spring入门项目
spring是一个很优秀的基于Java的轻量级开源框架,为了解决企业级应用的复杂性而创建的,spring不仅可用于服务器端开发,从简单性.可测试性和松耦合性的角度,任何java应用程序都可以利用这个思 ...
- 电话激活windows server 2012的解决方案
在激活Windows系统时,微软一直秉承着坑爹的传统,竟然把电话激活的界面给隐藏起来了,只留一个在线激活的界面,但是如果是给服务器激活系统,基本是不会有外网可以用的,不过我们可以通过命令行的方式进行激 ...
- HDU 4334 Trouble (暴力)
Trouble Time Limit: 5000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Statu ...
- HDU 2841 Visible Trees 数论+容斥原理
H - Visible Trees Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- Linux UGO
U=USER G=GROUP O=OTHERS 最前面的’-’,表示文件为普通类型 第一组的‘rw-’,表示文件属主对文件具有读和写权限,但没有执行权限 第二组的’rw-’,表示同组其他用户对文件具有 ...