bzoj 1369: Gem 树形dp
题目大意
给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小。N<=10000
题解
我们可以猜一个结论,用到的编号不会超过某一个值
我们发现我们可以开到100以上都不会超时
所以我们把编号最多100算,跑树形dp即可
其实可以证明编号不会超过logn...
Code
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
	x=0;char ch;bool flag = false;
	while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
	while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
const int maxn = 10010;
struct Edge{
	int to,next;
}G[maxn<<1];
int head[maxn],cnt;
void add(int u,int v){
	G[++cnt].to = v;
	G[cnt].next = head[u];
	head[u] = cnt;
}
inline void insert(int u,int v){
	add(u,v);add(v,u);
}
int f[maxn][22],g[maxn][4];
const int inf = 0x3f3f3f3f;
const int colnum = 3;
#define v G[i].to
void dfs(int u,int fa){
	for(int i=1;i<=colnum;++i) f[u][i] = i;
	for(int i = head[u];i;i=G[i].next){
		if(v == fa) continue;
		dfs(v,u);
		for(int j=1;j<=colnum;++j){
			if(g[v][0] == f[v][j]) f[u][j] += g[v][1];
			else f[u][j] += g[v][0];
		}
	}
	g[u][0] = g[u][1] = inf;
	int pos = -1;
	for(int i=1;i<=colnum;++i){
		if(f[u][i] < g[u][0]) g[u][0] = f[u][i],pos = i;
	}
	for(int i=1;i<=colnum;++i){
		if(i == pos) continue;
		g[u][1] = min(g[u][1],f[u][i]);
	}
}
#undef v
int main(){
	int n;read(n);
	int u,v;
	for(int i=1;i<n;++i){
		read(u);read(v);
		insert(u,v);
	}dfs(1,0);
	printf("%d\n",g[1][0]);
	getchar();getchar();
	return 0;
}
												
											bzoj 1369: Gem 树形dp的更多相关文章
- BZOJ 1369: [Baltic2003]Gem(树形dp)
		
传送门 解题思路 直接按奇偶层染色是错的,\(WA\)了好几次,所以要树形\(dp\),感觉最多\(log\)种颜色,不太会证. 代码 #include<iostream> #includ ...
 - 【BZOJ-1369】Gem       树形DP
		
1369: [Baltic2003]Gem Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 282 Solved: 180[Submit][Status] ...
 - BZOJ 1149 风铃(树形DP)
		
题目描述的实际是一颗二叉树,对于每个结点,要么满叉,要么无叉. 对于一种无解的简单情况,我们搜一遍树找到最浅的叶子结点1和最深的叶子结点2,如果dep[1]<dep[2]-1,则显然无解. 所以 ...
 - 【bzoj1369】[Baltic2003]Gem  树形dp
		
题目描述 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. 输入 先给出一个数字N,代表树上有N ...
 - BZOJ1369/LG4395 「BOI2003」Gem  树形DP
		
问题描述 LG4395 BZOJ1369 题解 发现对于结点 \(x\) ,其父亲,自己,和所有的孩子权值不同,共 \(3\) 类,从贪心的角度考虑,肯定是填 \(1,2,3\) 这三种. 于是套路树 ...
 - [BOI2003] Gem - 树形dp
		
结论 不同颜色数不会超过 \(O(\log n)\) 然后就是很简单的树形dp了 顺便复习一下树形dp怎么写 #include <bits/stdc++.h> using namespac ...
 - BZOJ 1369 Gem - 树型dp
		
传送门 题目大意: 给一棵树上每个点一个正权值,要求父子的权值不同,问该树的最小权值和是多少. 题目分析: 证不出来最少染色数,那就直接信仰用20来dp吧:dp[u][i]表示u节点权值赋为i时u子树 ...
 - 【BZOJ 3090】 树形DP
		
3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农 ...
 - bzoj 1131 简单树形dp
		
思路:随便想想就能想出来啦把... 卡了我一个vector... #include<bits/stdc++.h> #define LL long long #define fi firs ...
 
随机推荐
- jsp获取web.xml 里的配置项
			
ServletContext servletContext = request.getSession().getServletContext(); String titl ...
 - 30天自制操作系统(二)汇编语言学习与Makefile入门
			
1 介绍文本编辑器 这部分可直接略过 2 继续开发 helloos.nas中核心程序之前的内容和启动区以外的内容先不讲了,因为还涉及到一些软盘方面的知识. 然后来讲的是helloos.nas这个文件 ...
 - linux SPI驱动——spi协议(一)
			
一:SPI简介以及应用 SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在 ...
 - poj 2096 Collecting Bugs 【概率DP】【逆向递推求期望】
			
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 3523 Accepted: 1740 ...
 - HTML 学习笔记 JQuery(锋利的JQuery 代码)
			
一 制作简单的导航栏 <html> <head> <meta charset="UTF-8"> <title></title& ...
 - 题解 CF97C 【Winning Strategy】
			
题解 CF97C [Winning Strategy] 此题是某平台%你赛原题,跟大家分享一下某校zsy和sxr等同学的神仙做法. 我解释一下题意,大是说,我有[无限]个人,每个人可以对他" ...
 - BZOJ4944: [Noi2017]泳池
			
BZOJ4944: [Noi2017]泳池 题目背景 久莲是个爱玩的女孩子. 暑假终于到了,久莲决定请她的朋友们来游泳,她打算先在她家的私人海滩外圈一块长方形的海域作为游泳场. 然而大海里有着各种各样 ...
 - distributed OSGI demo
			
今天继续<OSGi原理与最佳实践>.看到第四章.做 HelloWorld-cxf 的样例 照着样例敲来着,整个样例敲完了,执行.一直报错, ----------------这里是解决方法- ...
 - 如何使用doctrine:migrations:migrate
			
doctrine:migrations:migrate: 可以生成数据库表 当新建完实体之后需要执行 doctrine:migrations:diff 更新差异到db 然后就ok了,这时候你的app/ ...
 - yun 安装mysql
			
1.安装客户端和服务器端 确认mysql是否已安装: yum list installed mysql* rpm -qa | grep mysql* 查看是否有安装包: yum list mysq ...