hdu 4714 Tree2cycle 树形经典问题】的更多相关文章

发现今天没怎么做题,于是随便写了今天杭电热身赛的一题. 题目:给出一棵树,删边和添边的费用都是1,问如何删掉一些树边添加一些树边,使得树变成一个环. 分析:统计树的分支数.大概有两种做法: 1.直接dfs,由底向上统计,对于叶子节点,返回1.对于父节点,统计子节点的返回值的和(sum),如果大于1,说明存在两个子链或以上,所以这里需要sum-1个分支,返回0.如果小于等于1,返回1.画个图就知道了... 图中发现: 节点返回值和为sum>1时,需要sum-1个分支. 某节点返回值和sum=3,则…
题意:给定一棵树,断开一条边或者接上一条边都要花费 1,问你花费最少把这棵树就成一个环. 析:树形DP,想一想,要想把一棵树变成一个环,那么就要把一些枝枝叶叶都换掉,对于一个分叉是大于等于2的我们一定要把它从父结点上剪下来是最优的, 因为如果这样剪下来再粘上花费是2(先不管另一端),如果分别剪下来再拼起来,肯定是多花了,因为多了拼起来这一步,知道这,就好做了.先到叶子结点, 然后再回来计算到底要花多少. 代码如下: #pragma comment(linker, "/STACK:10240000…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 Tree2cycle Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total Submission(s): 400    Accepted Submission(s): 78 Problem Description A tree with N nodes and N-…
Tree2cycle Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total Submission(s): 324    Accepted Submission(s): 54 Problem Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge,…
Tree2cycle dfs 不是根节点:如果边数大于等于2,则删除与父节点的边.并且是一条环,那么每个点的度数是2,则还要删除num(每个节点儿子数)-2,只留两个儿子.当然删除边的儿子也要连到环上,又是一个num(每个节点儿子数)-2次操作.最后不同分支之间还要连一条边.所以复杂度为:2*(num-1). 根:不用删父亲边和连分支边.2*(num-2) 注意本题要手动扩栈 #pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hd…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪心. 将树变成环的过程,无非就是先拆掉k条边,将这棵树变成若干个链,然后再添加k+1条边,将所有链连成环. 所以要让最终代价最小,就是让拆的边最少. 对于节点i的子树,如果要将这棵子树全部变成链,则总共有两种情况: (1)节点i的儿子数 <= 1,这样的话根本就不用拆啊. (2)节点i的儿子数 >…
用树形dp做的,dp[t][i]表示t及其孩子入度都已经小于等于2并且t这个节点的入度等于i的最优解. 那么转移什么的自己想想就能明白了. 关键在于这个题目会暴栈,所以我用了一次bfs搜索出节点的顺序,然后再计算. #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=1e6+9; struct { int to,next; }e[maxn…
Tree2cycle Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total Submission(s): 2161    Accepted Submission(s): 508 Problem Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edg…
Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 unit of cost respectively. The nodes are labeled from 1 to N. Your job is to transform the tree to a cycle(without superfluous edges) using minimal c…
假设最少删除的边的个数为cost,显然,最终答案即为cost+cost+1 (因为删除一条边,就会增加一个链,所以删除cost条边后,就会有cost+1条链,将这cost+1条链连接起来的代价为cost+1, 删除cost条边的代价为cost,所以总代价为cost+cost+1) 求最少删除的边数: 首先我们定义一棵子树中的链不能以该子树的根为端点,以下提到的所有链均必须满足这个条件. 设一棵以节点i为根的子树中,叶子节点的个数为duan,并设i的父亲为fa. 那么,这棵子树至少会分割成duan…