HDU 4714 Tree2cycle 找规律
假设最少删除的边的个数为cost,显然,最终答案即为cost+cost+1 (因为删除一条边,就会增加一个链,所以删除cost条边后,就会有cost+1条链,将这cost+1条链连接起来的代价为cost+1, 删除cost条边的代价为cost,所以总代价为cost+cost+1)
求最少删除的边数:
首先我们定义一棵子树中的链不能以该子树的根为端点,以下提到的所有链均必须满足这个条件。
设一棵以节点i为根的子树中,叶子节点的个数为duan,并设i的父亲为fa。
那么,这棵子树至少会分割成duan-1条链(以其中两个叶子为端形成一条链,剩下的一个叶子对应一条链)。
DFS,对于某棵以节点i为根的子树,如果子树中叶子节点个数<=1,那么在这棵子树内无法分割成完整的一条链(分割成完整的链至少需要两个叶子),相当于对fa而言,节点i依然是一个叶子。
如果子树中有>=2个叶子,那么这棵子树内可以分割成完整的duan-1条链,相当于对fa而言,删掉节点i及以i为根的子树。
PS1.对于没有fa的节点特殊判断一下。
PS2.手动扩栈
#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector> using namespace std; const int MAXN = ; struct node
{
int v;
int next;
}; int n;
node D[MAXN<<];
int head[MAXN];
int cost, EdgeN; void AddEdge( int u, int v )
{
D[EdgeN].v = v;
D[EdgeN].next = head[u];
head[u] = EdgeN++;
return;
} int DFS( int cur, int fa )
{
int duan = ;
for ( int i = head[cur]; i != -; i = D[i].next )
{
if ( D[i].v != fa )
duan += DFS( D[i].v, cur );
}
if ( duan < ) return ;
else
{
if ( cur == ) cost += duan - ; //如果是根节点
else cost += duan - ;
return ;
}
} int main()
{
int T;
scanf( "%d", &T );
while ( T-- )
{
scanf( "%d", &n );
memset( head, -, sizeof(int)*(n+) );
EdgeN = ;
for ( int i = ; i < n; ++i )
{
int u, v;
scanf( "%d%d", &u, &v );
AddEdge( u, v );
AddEdge( v, u );
} cost = ;
DFS( , - );
int ans = cost + + cost;
printf("%d\n", ans );
}
return ;
}
HDU 4714 Tree2cycle 找规律的更多相关文章
- HDU 4714 Tree2cycle DP 2013杭电热身赛 1009
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 Tree2cycle Time Limit: 15000/8000 MS (Java/Other ...
- HDU 2086 A1 = ? (找规律推导公式 + 水题)(Java版)
Equations 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2086 ——每天在线,欢迎留言谈论. 题目大意: 有如下方程:Ai = (Ai-1 ...
- hdu 5047 大数找规律
http://acm.hdu.edu.cn/showproblem.php?pid=5047 找规律 信kuangbin,能AC #include <stdio.h> #include & ...
- HDU 4714 Tree2cycle
Tree2cycle dfs 不是根节点:如果边数大于等于2,则删除与父节点的边.并且是一条环,那么每个点的度数是2,则还要删除num(每个节点儿子数)-2,只留两个儿子.当然删除边的儿子也要连到环上 ...
- HDU 4714 Tree2cycle:贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪 ...
- hdu 5106 组合数学+找规律
http://acm.hdu.edu.cn/showproblem.php?pid=5106 给定n和r,要求算出[0,r)之间所有n-onebit数的和,n-onebit数是所有数位中1的个数. 对 ...
- Doom HDU - 5239 (找规律+线段树)
题目链接: D - Doom HDU - 5239 题目大意:首先是T组测试样例,然后n个数,m次询问,然后每一次询问给你一个区间,问你这个这段区间的加上上一次的和是多少,查询完之后,这段区间里 ...
- HDU 4714 Tree2cycle (树形DP)
Tree2cycle Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Tot ...
- hdu 4708(暴力+找规律)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4708 思路:由于N不大,并且我们可以发现通过旋转得到的4个对角线的点的位置关系,以及所要旋转的最小步数 ...
随机推荐
- .net 开源的网站
https://www.zhihu.com/question/24408855 https://www.zhihu.com/question/19840134 这两个知乎的答案 介绍部分经典的.net ...
- EF 集合版 增删查改
- Java Web入门经典扫描版
全书共分4篇19章,其中,第一篇为“起步篇”,主要包括开启JavaWeb之门.不可不知的客户端应用技术.驾驭JavaWeb开发环境.JavaWeb开发必修课之JSP语法等内容:第二篇为“核心篇”,主要 ...
- 一篇SSM框架整合友好的文章(一)
转载请标明出处: http://blog.csdn.net/forezp/article/details/53730333 本文出自方志朋的博客 最近实在太忙,之前写的<rxjava系列文章&g ...
- java基础语法:非法修饰符组合 abstract
abstract 与 final :abstract 是需要被继承以实现的,final却说你不能被修改,逻辑错误 abstract 与 private:同样的abstract 需要被子类实现,但pr ...
- iso十款常用类库
iso十款常用类库 MBProgressHUD(进展指示符库) 地址:https://github.com/jdg/MBProgressHUD 苹果的应用程序一般都会用一种优雅的,半透明的进度 ...
- 利用Selenium+java实现淘宝自动结算购物车商品(附源代码)
转载请声明原文地址! 本次的主题是利用selenium+java实现结算购买购物车中的商品. 话不多说,本次首先要注意的是谷歌浏览器的版本,浏览器使用的驱动版本,selenium的jar包版本. ...
- datatable 默认按某字段排序
"columns": [ { data: null}, { data: 'name'}, { data: 'birthday'} ], "order": [[ ...
- Guava Cache 工具类 [ GuavaCacheUtil ]
pom.xml <dependency> <groupId>com.google.guava</groupId> <artifactId>guava&l ...
- CSS设置背景透明字体不透明
写CSS时给容器设置透明度的时候如果使用background-color: #000000; opacity: 0.5;这时会出现容器里的文字也跟着透明.解决办法是不用十六进制的色值和透明度分开写,使 ...