树形 DP hdu4714 Tree2cycle
来源:互联网 发布:兵马俑知乎 编辑:程序博客网 时间:2024/05/19 19:41
好坑的题,如果不加栈就会re,加栈以后记得交c++
#pragma comment(linker, "/STACK:1024000000,1024000000")
树形dp
思路:
分析出构成环的最少步骤
其实就是找将分开一条一条线连接成环
从每个点开始分析
如果一个点它的度数是小于2那么这个点所连接的边就一定不会拆开
如果这个点的读书是大于或者等于2
此时如果这个点和它的父节点不断开,那么它的子节点就只能保存一个
反之如果它和父节点断开,那么子节点可以保存两个
这样分析一下断开父节点一定是最优的情况
所以我们根据每个节点的子节点个数来找最后的步骤数
node子节点个数为s
s>=2 断开父节点+1,断开s-2个子节点+(s-2)
将s-2个子节点连接+(s-2)
将断开的node点与父节点部分相连接+1
如果node为根节点那么就不需要断开父节点,和与父节点再次相连接
/********************************************
Author :Crystal
Created Time :
File Name :
********************************************/
#pragma comment(linker, "/STACK:1024000000,1024000000")//阔栈
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
#include <cctype>
using namespace std;
typedef long long ll;
typedef pair<int ,int> pii;
#define MEM(a,b) memset(a,b,sizeof a)
#define CLR(a) memset(a,0,sizeof a);
const int inf = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
//#define LOCAL
#define maxn 2100000
int nxt[maxn],pnt[maxn],head[maxn];
int cnt;
int n;
int ans=0;
void addedge(int u,int v){
pnt[cnt]=v;
nxt[cnt]=head[u];
head[u]=cnt++;
}
int dfs(int u,int pre){
int s = 0;
for(int i=head[u];i!=-1; i = nxt[i]){
int v = pnt[i];
if(v != pre){
s+=dfs(v,u);
}
}
if(s >= 2){
if(u==1) ans += 2*(s-2);
else ans += 2*(s-2)+2;
return 0;
}
return 1;
}
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
// freopen("out.txt","w",stdout);
#endif
int t;
scanf("%d",&t);
while(t--){
for(int i=0;i<maxn;i++)head[i]=-1;
cnt = 1;
scanf("%d",&n);
ans = 0;
for(int i=0;i<n-1;i++){
int u,v;scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
dfs(1,-1);
printf("%d\n",ans+1);
}
return 0;
}
- hdu4714 Tree2cycle 树形DP
- 树形 DP hdu4714 Tree2cycle
- hdu4714 Tree2cycle(树形dp)
- hdu4714 Tree2cycle
- hdu4714 Tree2cycle
- hdu4714之树形DP
- hdu4714(树形dp)
- hdu4714 树形dp
- hdu4714 Tree2cycle 树上乱搞
- Tree2cycle hdu4714 贪心
- 树形dp-hdu-4714-Tree2cycle
- hdu 4714 Tree2cycle (树形dp)
- HDU 4714 Tree2cycle(树形dp)
- 树形DP+贪心(乱搞)(HDU4714)
- HDU 4714 Tree2cycle (构造,树形DP)
- HDOJ 题目4714 Tree2cycle(树形DP)
- hdu4714树形DP,用c++交别用g++交
- hdu4714 Tree2cycle 使一棵树变成环最小代价
- 九度oj 1203
- 谈谈时间函数gettimeofday
- LeetCode_binary-tree-paths
- 我的第一篇博客
- 深入分析 Java 中的中文编码问题
- 树形 DP hdu4714 Tree2cycle
- Android开发 OAuth认证
- 安装 cordova错误为权限导致
- 通过Myeclipse生成Javadoc文档的方法
- ExtJs 入门教程一[学习方法]
- Android:Plug-in com.android.ide.eclipse.adt was unable to load class android
- 学前班 第1节 怎么看原理图之GPIO和门电路
- hdoj 1686 Oulipo 【kmp(模板)】
- ExtJs 入门教程二[Hello World]