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 ...
随机推荐
- 使用Netty进行Android与Server端通信实现文字发送接收与图片上传
ANOTHER TITLE: Let’s use netty to achieve text send and receive and image transfer to server based ...
- Android_Intent_passValueForResult
当SecondActivity需要回传参数时:1. MainActivity启动SecondActivity时需要调用startActivityForResult() 并定义请求码2. SecondA ...
- 移动平台作业——天气预报——天气数据的获得——为应用申请百度ak码
需求: 可切换城市 可实时更新(按钮或手势或下拉刷新) 可现实未来三日的天气 不限制横屏或者竖屏,不限制布局样式,但要求得到的数据均需显示(北京.天气数据.天气图标) 提示: 获得实时天气数据(任选一 ...
- (转)HttpHandler与HttpModule的理解与应用
神秘的HttpHandler与HttpModule 大学时候我是从拖控件开始学习 asp.net的,对.net的很多类库对象都不是很了解.所以看到大家写一些个性的asp.net名词,就感觉asp.ne ...
- mysql数据库文件默认保存目录(windows)
如果没有自己去设置安装路径,MYSQL默认安装在C:/Program Files/MySQL/MySQL Server 5.1,新建的数据库文件在C:/Documents and Settings/A ...
- Deep Learning 学习随记(三)续 Softmax regression练习
上一篇讲的Softmax regression,当时时间不够,没把练习做完.这几天学车有点累,又特别想动动手自己写写matlab代码 所以等到了现在,这篇文章就当做上一篇的续吧. 回顾: 上一篇最后给 ...
- ios 从微信返回自己的app
有这样一个需求.从我们自己的app分享内容到微信.点击分享内容返回到我们自己的app.(新浪微博的内容分享到微信就是这样的) 前面一直百度,谷歌都没用.可能我用的方法跟他们不一样吧.而且他们的方法都比 ...
- iOS NSNumber语法糖
BOOL equal; NSNumber * num1 = [NSNumber numberWithInteger:]; NSNumber * num2 = @; equal = [num1 isEq ...
- swift-闭包和类的声明
//闭包:类似Oc中的block 反向传值引起代码的回调 func hasClosureMathes(arr : [Int],value:Int,cb:(num:Int,value : Int)-&g ...
- css样式 第6节
程序员语录: 不要太刻意地把写程序这件事和挣钱挂起来,局限了你挣钱的本事 <html> <head> <title>网页样式</title> </ ...