hdu 4714
一个树形dp的题,又是一个涉及不深的领域 = =;
不过在网上看到了大神用很巧的思路解决了这个题;
大神的思路就是:
从树的底部往上看:如果一棵子树拥有两个及以上的叶子节点,可以将这棵子树与大树分离,并且将子树化成一条直线;
为什么这样子是最优呢?我不会证明,但我觉得这种情况可以保留最多不被删除的边;
代码:
#pragma comment(linker,"/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#define maxn 1000005
using namespace std; vector<int>ve[maxn];
bool v[maxn];
int ans;
int dfs(int a)
{
v[a]=;
int l=ve[a].size(),res=;
for(int i=; i<l; i++)
if(!v[ve[a][i]])
res+=dfs(ve[a][i]);
if(res>=)
{
if(a==)ans+=res-;
else ans+=res-;
return ;
}
else return ;
} int main()
{
int t,n,a,b;
scanf("%d",&t);
while(t--)
{
ans=;
scanf("%d",&n);
for(int i=; i<=n; i++)
ve[i].clear();
for(int i=; i<n; i++)
{
scanf("%d%d",&a,&b);
ve[a].push_back(b);
ve[b].push_back(a);
}
dfs();
printf("%d\n",*ans+);
memset(v,,sizeof v);
}
return ;
}
利用dp的思想:将整棵树拆成N个单枝(所有点的度小于2),所需的cost即为2*N-1(拆成N个单枝需 N-1 cost,合成一个环需要 N cost)。
#pragma comment(linker,"/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#define maxn 1000005
using namespace std; vector<int>ve[maxn];
bool v[maxn];
int dp[maxn][];
int ans; void dfs(int a)
{
v[a]=;
dp[a][]=dp[a][]=dp[a][]=;
int l=ve[a].size();
for(int i=;i<l;i++)
{
int u=ve[a][i];
if(!v[u])
{
dfs(u);
dp[a][]=min(dp[a][]+dp[u][],dp[a][]+dp[u][]-);
dp[a][]=min(dp[a][]+dp[u][],dp[a][]+dp[u][]-);
dp[a][]=dp[a][]+dp[u][];
}
}
} int main()
{
int t,n,a,b;
scanf("%d",&t);
while(t--)
{
memset(dp,,sizeof dp);
ans=;
scanf("%d",&n);
for(int i=; i<=n; i++)
ve[i].clear();
for(int i=; i<n; i++)
{
scanf("%d%d",&a,&b);
ve[a].push_back(b);
ve[b].push_back(a);
}
dfs();
ans=min(dp[][],min(dp[][],dp[][]));
printf("%d\n",*ans-);
memset(v,,sizeof v);
}
return ;
}
hdu 4714的更多相关文章
- HDU 4714 Tree2cycle DP 2013杭电热身赛 1009
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 Tree2cycle Time Limit: 15000/8000 MS (Java/Other ...
- hdu 4714 树+DFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 本来想直接求树的直径,再得出答案,后来发现是错的. 思路:任选一个点进行DFS,对于一棵以点u为 ...
- HDU 4714 Treecycle(树形dp)
http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意:给出一棵树,删除一条边和添加一条边的代价都是1,现在要把这棵树变成环,求需要花的最小代价. 思路: ...
- HDU 4714 Tree2cycle:贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪 ...
- HDU 4714 Tree2cycle
Tree2cycle dfs 不是根节点:如果边数大于等于2,则删除与父节点的边.并且是一条环,那么每个点的度数是2,则还要删除num(每个节点儿子数)-2,只留两个儿子.当然删除边的儿子也要连到环上 ...
- hdu 4714 树形DP
思路:dp[i][0]表示第i个节点为根的子树变成以i为一头的长链最小的花费,dp[i][0]表示表示第i个节点为根的子树变成i不是头的长链最小花费. 那么动态方程也就不难想了,就是要分几个情况处理, ...
- hdu 4714 Tree2cycle 树形经典问题
发现今天没怎么做题,于是随便写了今天杭电热身赛的一题. 题目:给出一棵树,删边和添边的费用都是1,问如何删掉一些树边添加一些树边,使得树变成一个环. 分析:统计树的分支数.大概有两种做法: 1.直接d ...
- hdu 4714 Tree2cycle dp
用树形dp做的,dp[t][i]表示t及其孩子入度都已经小于等于2并且t这个节点的入度等于i的最优解. 那么转移什么的自己想想就能明白了. 关键在于这个题目会暴栈,所以我用了一次bfs搜索出节点的顺序 ...
- HDU 4714 Tree2cycle (树形DP)
Tree2cycle Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Tot ...
随机推荐
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)
这一章大象将详细分析web层代码,以及使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 之前在使用Struts2实现MVC的注解时,是借助struts2-conventi ...
- ZBLibrary不能运行的解决方法
ADT运行 右键ZBLibrary Demo > Run as > Android Application 可能出现部分错误,解决方案如下: 右键Project(这里为ZBLibrar ...
- Netbeans7.0完美中文+Consolas字体显示配置(亲测可用)
最近把开发环境从Eclipse迁移到了Netbeans上面.因为Netbeans已经相当优秀,速度快功能也不必Eclipse差,但是一只有 一个问题一直让我对eclipse非常纠结:如果把字体选择为C ...
- view,SurfaceView,GLSurfaceView的关系和区别
如果你的游戏不吃CPU,用View就比较好,符合标准Android操作方式,由系统决定刷新surface的时机. 但如果很不幸的,你做不到不让你的程序吃CPU,你就只好使用SurfaceView来强制 ...
- eclipse Ctrl+1 没反应
今天上午写代码,突然发现Ctrl+1没反应了,顿时无语.昨天还好好的,今天就不行了…… 无奈,只好在网上查了查,据说快捷键冲突的原因比较大. 于是我将Ctrl+1换成了Alt+1.在eclipse中测 ...
- Runtime 在IOS中的详细使用
因为之前写东西的时候,都在未知笔记中,所有大家没有看到过我的文章,今天就开始使用博客园来进行和大家沟通.好了,废话不那么多了,转入正题.下面我把runtime 给大家介绍一下. ### 一.runti ...
- 理解RunLoop
一.什么是RunLoop? 从字面意思上来看,RunLoop就是运行循环,跑圈的意思. 我们都知道,一般来说一个线程执行一次任务之后便会退出,在iOS中,如果主线程只执行一次便退出的话也就意味着程序的 ...
- linux 列出安装包内的文件
rpm系列: 1. 文件类型 rpm -qpl xxx.rpm2. 已安装文件 rpm -ql packagename debain系列: dpkg -c xxxx.deb
- 263. Ugly Number(C++)
263. Ugly Number Write a program to check whether a given number is an ugly number. Ugly numbers are ...
- What is the Xcopy Command?:
Quote from: http://pcsupport.about.com/od/commandlinereference/p/xcopy-command.htm The xcopy command ...