POJ 1848 Tree 树形DP
题目大意:
给出一棵树,现在要往这棵树上加边,使得所有的点都在环中,且每个点只能属于一个环
题解:
考虑DP:  
\(dp[i][0]\)表示使\(i\)这颗子树的每个点都在环内需要加的最少边数。
\(dp[i][1]\)表示使\(i\)这颗子树除了根\(i\)之外的其余点都在环内要加的最少边数。
\(dp[i][2]\)表示使\(i\)这颗子树除了根\(i\)所在的一条链外的其余点都在环内要加的最少边数
考虑转移:
\]
\]
\]
\]
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
#define int long long 
using namespace std;
namespace Tzh{
	const int maxn=110,inf=0x3f3f3f3f;
	int st[maxn],dp[maxn][3],n,cnt,head[maxn];
	struct ed{
		int next,to;
	}e[maxn<<1];
	void add(int u,int v){
		e[++cnt].next=head[u],e[cnt].to=v,head[u]=cnt;
		e[++cnt].next=head[v],e[cnt].to=u,head[v]=cnt;
	}
	void dfs(int now,int fa){
		int sum=0;
		vector<int> st;
		for(int i=head[now];i;i=e[i].next){
			int tt=e[i].to; if(tt==fa) continue;
			st.push_back(tt); dfs(tt,now); sum=sum+dp[tt][0];
		}
		dp[now][1]=sum; dp[now][0]=dp[now][2]=inf;
		if(!st.size()) return ;
		for(int i=0;i<st.size();i++){
			dp[now][0]=min(dp[now][0],sum-dp[st[i]][0]+dp[st[i]][2]+1);
			dp[now][2]=min(dp[now][2],sum-dp[st[i]][0]+min(dp[st[i]][1],dp[st[i]][2]));
		}
		for(int i=0;i<st.size();i++)
			for(int j=i+1;j<st.size();j++)
				dp[now][0]=min(dp[now][0],sum-dp[st[i]][0]-dp[st[j]][0]+1
								+min(dp[st[i]][1],dp[st[i]][2])+min(dp[st[j]][1],dp[st[j]][2]));
	}
	void work(){
		scanf("%lld",&n); int u,v;
		for(int i=1;i<n;i++) scanf("%lld%lld",&u,&v),add(u,v);
		dfs(1,0);
		printf("%lld",dp[1][0]==inf?-1:dp[1][0]);
		return ;
	}
}	
signed main(){
	Tzh::work();
	return 0;
}
												
											POJ 1848 Tree 树形DP的更多相关文章
- POJ 1741 Tree 树形DP(分治)
		
链接:id=1741">http://poj.org/problem?id=1741 题意:给出一棵树,节点数为N(N<=10000),给出N-1条边的两点和权值,给出数值k,问 ...
 - 熟练剖分(tree) 树形DP
		
熟练剖分(tree) 树形DP 题目描述 题目传送门 分析 我们设\(f[i][j]\)为以\(i\)为根节点的子树中最坏时间复杂度小于等于\(j\)的概率 设\(g[i][j]\)为当前扫到的以\( ...
 - Apple Tree POJ - 2486 (树形dp)
		
题目链接: D - 树形dp POJ - 2486 题目大意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值 学习网址:https://blog.c ...
 - POJ 2486 Apple Tree(树形DP)
		
题目链接 树形DP很弱啊,开始看题,觉得貌似挺简单的,然后发现貌似还可以往回走...然后就不知道怎么做了... 看看了题解http://www.cnblogs.com/wuyiqi/archive/2 ...
 - POJ 3107.Godfather 树形dp
		
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7536 Accepted: 2659 Descrip ...
 - hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)
		
题目链接: Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others) Memory Limit: ...
 - CF 461B Appleman and Tree  树形DP
		
Appleman has a tree with n vertices. Some of the vertices (at least one) are colored black and other ...
 - [POJ 1155] TELE (树形dp)
		
题目链接:http://poj.org/problem?id=1155 题目大意:电视台要广播电视节目,要经过中转机构,到观众.从电视台到中转商到观众是一个树形结构,经过一条边需要支付成本.现在给你每 ...
 - codeforces 161D Distance in Tree 树形dp
		
题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...
 
随机推荐
- I/O输出流基础之FileOutputStream
			
OutputStream:是所有字节输出流的父类,其作用是:用这个流把网络数据(getOutputStream()),或者内存中的字节数组数据写到文件系统中文件系统(FileOutputStream) ...
 - Java开发笔记(八十二)注解的基本单元——元注解
			
Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @ ...
 - OGNL详解
			
A.什么是OGNL? 全称叫ObjectGraphic Navigation Language(对象图导航语言),它是struts2框架里面的第三方语言(即可以再别的地方用,struts2只是拿过来了 ...
 - 常用vi编辑器命令行
			
游标控制: h 游标向左移 j 游标向下移 k 游标向上移 l(or spacebar) 游标向右移 w 向前移动一个单词 b 向后移动一个单词 e 向前移动一个单词,且游标指向单词的末尾 ( 移到当 ...
 - 04 入门 - ASP.NET MVC应用程序的结构
			
目录索引:<ASP.NET MVC 5 高级编程>学习笔记 用Visual Studio创建了一个新的ASP.NET MVC应用程序后,将自动向这个项目中添加一些文件和目录. 如图所示: ...
 - Odoo的模块和应用程序的区别和使用
			
一.模块(modules)和应用程序(application)的区别: 模块元件是Odoo应用程序的组成快.模块可以将新功能添加到Odoo,或改变现有功能.模块是一个包含名为__manifest__. ...
 - Android Studio打包SDK后,为什么没有bundles文件夹?
			
在Android Studio中,将项目打包成jar包,按照网上说的方法打包完成后,在intermediates文件夹下没有bundles,AS版本3.1.2,后来发现,原来是intermediate ...
 - nginx性能优化(针对于高并发量仅供参考,并不是方案)
			
目录 关于nginx.conf中的优化 配置nginx客户端网页缓存本地时间 nginx日志切割 nginx连接超时优化 Nginx 实现网页压缩功能 Nginx 实现防盗链功能 为目录添加访问控制 ...
 - 从0开始的Python学习018更多的Python内容
			
特殊的方法 之前学习的都是一些常用的方法,为了使我们的学习更加的完整,我们在这里学习一些特殊的方法. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的索引操作( ...
 - servlet之转发与重定向的区别
			
转发(服务器端跳转): 一次请求 <jsp:forward> request.getRequestDispatcher("new.jsp").forward(requ ...