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 ...
随机推荐
- JavaScript入门(6)
一.if语句 if语句是基于条件成立才执行相应代码时使用的语句 语法: if(条件) {条件成立时执行代码} 注: if小写,大写字母IF会出错! 二.if...else语句(二选一) 语法: if( ...
- C++编程注意事项
1.所有成员变量在构造函数中进行初始化操作,如指针赋值为空,bool赋值为FALSE(默认为TRUE); 2.构造函数与析构函数配对出现,执行反向操作,保证执行析构之后,没有遗留问题存在: 3.如果需 ...
- ASP和PHP限制IP访问 只允许指定IP访问 允许*号通配符过滤IP
/** * 检测访问的ip是否为规定的允许的ip * Enter description here ... */ function check_ip(){ $ALLOWED_IP=array('192 ...
- WPF TreeView递归遍历相关方法
/// <summary> /// 递归改变组织树选中状态. /// </summary> /// <param name="org">< ...
- web.xml配置中的 文件类型<mime-mapping>
<mime-mapping> <extension>doc</extension> <mime-type>application/msword</ ...
- itoa : Convert integer to string
Quote from: http://www.cplusplus.com/reference/cstdlib/itoa/ function Required header : <s ...
- Oracle的硬解析和软解析
提到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程.当你发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进 ...
- PHPUML 生成UML
Selecting the UML/XMI version To select which version of the UML/XMI standards you want your XMI to ...
- $.ajax参数备注-转转转
jquery中的ajax方法参数总是记不住,这里记录一下. $,ajax()方法参数详解 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为St ...
- mvc中的OutputCache
mvc4中有一个标记属性OutputCache,用来对ActionResult结果进行缓存,如何理解呢?概括地说,就是当你的请求参数没有发生变化时,直接从缓存中取结果,不会再走服务端的Action代码 ...