hdu 4717 Tree2cycle(树形DP)

时间:2022-08-26 22:26:48

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 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 cost.

A cycle of n nodes is defined as follows: (1)a graph with n nodes and n edges (2)the degree of every node is 2 (3) each node can reach every other node with these N edges.

 
Input
The first line contains the number of test cases T( T<=10 ). Following lines are the scenarios of each test case.
In the first line of each test case, there is a single integer N( 3<=N<=1000000 ) - the number of nodes in the tree. The following N-1 lines describe the N-1 edges of the tree. Each line has a pair of integer U, V ( 1<=U,V<=N ), describing a bidirectional edge (U, V).
 
Output
For each test case, please output one integer representing minimal cost to transform the tree to a cycle.
 
Sample Input
1
4
1 2
2 3
2 4
 
Sample Output
3
Hint

In the sample above, you can disconnect (2,4) and then connect (1, 4) and
(3, 4), and the total cost is 3.

 
Source
 
Recommend
liuyiding   |   We have carefully selected several similar problems for you:  5867 5866 5865 5864 5863 
/*
每个节点如果有两个或两个以上结点,就将它先于父节点断开,然后在与子节点断开,全部断开之后,和子节点自称一条直链,最后将所有的子链连城一条
直线一个结点有sum个子结点,断开是需要sum-2次操作,连接时需要sum-2次操作,这样一个结点就会进行2*(sum-2)次操作,这时加上断开父节点,一共
进行了2*(sum-2)+1次操作,构成直链之后还需要和父节点连接,这样就一共是2*(sum-1)次操作,如果这个结点是刚开始的结点,那么就不用考虑父节
点,这样操操作就是2*(sum-2)次
*/
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#define N 1000009
using namespace std;
int t,n;
vector<int > edge[N];
int ans=;
bool dfs(int u,int p)//返回你搜到的是不是u的子树
{
//cout<<"ans="<<ans<<endl;
int sum=;
for(int i=;i<edge[u].size();i++)
{
int v=edge[u][i];//下一步
if(v==p) continue;//下一步走过了,就不要走了
sum+=dfs(v,u);
//visit[v]=true;
//cout<<sum<<endl;
}
if(sum>=)
{
if(u==)
ans+=*(sum-);
else
ans+=*(sum-);
return false;
}
return true;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ans=;
int from,to;
for(int i=;i<=n;i++)
edge[i].clear();
for(int i=;i<n-;i++)
{
scanf("%d%d",&from,&to);
//cout<<from<<" "<<to<<endl;
edge[from].push_back(to);
edge[to].push_back(from);
}//建树
dfs(,-);
printf("%d\n",ans+);
}
return ;
}

hdu 4717 Tree2cycle(树形DP)的更多相关文章

  1. HDU 4714 Tree2cycle &lpar;树形DP&rpar;

    题意:给定一棵树,断开一条边或者接上一条边都要花费 1,问你花费最少把这棵树就成一个环. 析:树形DP,想一想,要想把一棵树变成一个环,那么就要把一些枝枝叶叶都换掉,对于一个分叉是大于等于2的我们一定 ...

  2. HDU 2196&period;Computer 树形dp 树的直径

    Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. HDU 2196 Computer 树形DP经典题

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...

  4. hdu 6201 【树形dp&vert;&vert;SPFA最长路】

    http://acm.hdu.edu.cn/showproblem.php?pid=6201 n个城市都在卖一种书,该书的价格在i城市为cost[i],商人打算从某个城市出发到另一个城市结束,途中可以 ...

  5. HDU 2196 Computer 树形DP 经典题

    给出一棵树,边有权值,求出离每一个节点最远的点的距离 树形DP,经典题 本来这道题是无根树,可以随意选择root, 但是根据输入数据的方式,选择root=1明显可以方便很多. 我们先把边权转化为点权, ...

  6. hdu 4081 最小生成树&plus;树形dp

    思路:直接先求一下最小生成树,然后用树形dp来求最优值.也就是两遍dfs. #include<iostream> #include<algorithm> #include&lt ...

  7. HDU 3899 简单树形DP

    题意:一棵树,给出每个点的权值和每条边的长度, 点j到点i的代价为点j的权值乘以连接i和j的边的长度.求点x使得所有点到点x的代价最小,输出 虽然还是不太懂树形DP是什么意思,先把代码贴出来把. 这道 ...

  8. hdu Anniversary party 树形DP,点带有值。求MAX

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. HDU 4313 Matrix 树形dp

    题意: 给定n个点的树,m个黑点 以下n-1行给出边和删除这条边的费用 以下m个黑点的点标[0,n-1] 删除一些边使得随意2个黑点都不连通. 问删除的最小花费. 思路: 树形dp 每一个点有2个状态 ...

随机推荐

  1. cxf&lpar;3&period;1&period;1&rpar; 客户端异常 请使用 &commat;XmlType&period;name 和 &commat;XmlType&period;namespace 为类分配不同的名称。

    最近项目使用webService 于是就使用了最新版本 3.1.1 . cxf 客户端调用时老是出现这个错误,综合网上各种资料修改如下,问题解决 "@XmlType.name 和 @XmlT ...

  2. xml的生成与解析&lowbar;老师笔记

    使用序列化器生成一个xml文件 //1,初始化一个xml文件的序列化器 XmlSerializer serializer = Xml.newSerializer(); //2.初始化序列器参数 Fil ...

  3. Ruby on Rails Tutorial读书笔记-1

    只是怕忘了命令,全部撸一次,记个大概.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 安装Ruby之前,先要安装RVM: curl -L https://get.rvm.io | bas ...

  4. curl之post提交xml

    直接上代码: /** * 以post方式提交xml到对应的接口url * * @param string $xml 需要post的xml数据 * @param string $url url * @p ...

  5. 2018年多校第三场第一题 A&period; Ascending Rating hdu6319

    比赛地址:http://acm.hdu.edu.cn/contests/contest_show.php?cid=804 题目编号:第一题 A. Ascending Rating  hdu6319 题 ...

  6. python算法博客推荐

    http://www.cnblogs.com/feixuelove1009/p/6143539.html https://www.cnblogs.com/feixuelove1009/p/614835 ...

  7. hot load那点事

    热加载,最初接触的时候是使用create-react-app的时候,创建一个项目出来,修改一点代码,页面自动刷新了,贫道当时就感叹,这是造福开发者的事情. 再后来编写静态页面的时候使用 VS Code ...

  8. 移动web模拟客户端实现多方框输入密码效果

    不知道怎么描述标题,先看截图吧,大致的效果就是一个框输入一位密码. 最开始实现的思路是一个小方框就是一个type为password的input,每输入一位自动跳到下一位,删除一位就自动跳到前一位,an ...

  9. 您可以从 Windows 命令行上运行 gcc、g&plus;&plus;、ar、ranlib、dlltool 和其他一些 GNU 工具

    Windows 上的安装为了在 Windows 上安装 GCC,您需要安装 MinGW.为了安装 MinGW,请访问 MinGW 的主页 www.mingw.org,进入 MinGW 下载页面,下载最 ...

  10. &lpar;转载&rpar;CUDA、tensorflow与cuDNN的版本匹配问题

    转载:https://blog.csdn.net/MahoneSun/article/details/80809042 CUDA.tensorflow与cuDNN的版本匹配问题 一.问题现象 CUDA ...