BZOJ1369/LG4395 「BOI2003」Gem 树形DP
问题描述
题解
发现对于结点 \(x\) ,其父亲,自己,和所有的孩子权值不同,共 \(3\) 类,从贪心的角度考虑,肯定是填 \(1,2,3\) 这三种。
于是套路树形DP,设 \(opt[x][1/2/3]\) 代表以 \(x\) 为根的子树中,且 \(x\) 标为 \(0/1/2\) 的最小值。
\(\mathrm{Code}\)
#include<bits/stdc++.h>
using namespace std;
template <typename Tp>
void read(Tp &x){
	x=0;char ch=1;int fh;
	while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
	if(ch=='-') ch=getchar(),fh=-1;
	else fh=1;
	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
	x*=fh;
}
const int maxn=10007;
const int maxm=20007;
int n;
int Head[maxn],to[maxm],Next[maxm],tot;
int opt[maxn][4];
void add(int x,int y){
	to[++tot]=y,Next[tot]=Head[x],Head[x]=tot;
}
void dp(int x,int f){
	for(int i=1;i<=3;i++) opt[x][i]=i;
	for(int i=Head[x];i;i=Next[i]){
		int y=to[i];
		if(y==f) continue;
		dp(y,x);
		opt[x][1]+=min(opt[y][2],opt[y][3]);
		opt[x][2]+=min(opt[y][1],opt[y][3]);
		opt[x][3]+=min(opt[y][1],opt[y][2]);
	}
}
int main(){
	read(n);
	for(int i=1,x,y;i<n;i++){
		read(x);read(y);
		add(x,y);add(y,x);
	}
	dp(1,0);
	printf("%d\n",min(opt[1][1],min(opt[1][2],opt[1][3])));
	return 0;
}
BZOJ1369/LG4395 「BOI2003」Gem 树形DP的更多相关文章
- 【BZOJ-1369】Gem       树形DP
		1369: [Baltic2003]Gem Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 282 Solved: 180[Submit][Status] ... 
- 【bzoj1369】[Baltic2003]Gem  树形dp
		题目描述 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. 输入 先给出一个数字N,代表树上有N ... 
- LiberOJ #6210. 「美团 CodeM 决赛」tree    树形DP
		题目链接:点这里 题解: 需要证明,所求的路径一定是全部权值都为1或者,路径上权值至多有一个为2其余为1且权值2在路径中央. 然后树形DP 设定dp[i][0/1] 以1为根的情况下,以i 节点下子树 ... 
- [BOI2003] Gem - 树形dp
		结论 不同颜色数不会超过 \(O(\log n)\) 然后就是很简单的树形dp了 顺便复习一下树形dp怎么写 #include <bits/stdc++.h> using namespac ... 
- bzoj 1369: Gem 树形dp
		题目大意 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小.N<=10000 题解 我们可以 ... 
- BZOJ 1369: [Baltic2003]Gem(树形dp)
		传送门 解题思路 直接按奇偶层染色是错的,\(WA\)了好几次,所以要树形\(dp\),感觉最多\(log\)种颜色,不太会证. 代码 #include<iostream> #includ ... 
- BZOJ1369:[Baltic2003]Gem(树形DP)
		Description 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. Input 先给出一个 ... 
- loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)
		题意 题目链接 Sol 质数的限制并没有什么卵用,直接容斥一下:答案 = 忽略质数总的方案 - 没有质数的方案 那么直接dp,设\(f[i][j]\)表示到第i个位置,当前和为j的方案数 \(f[i ... 
- 「洛谷5017」「NOIP2018」摆渡车【DP,经典好题】
		前言 在考场被这个题搞自闭了,那个时候自己是真的太菜了.qwq 现在水平稍微高了一点,就过来切一下这一道\(DP\)经典好题. 附加一个题目链接:[洛谷] 正文 虽然题目非常的简短,但是解法有很多. ... 
随机推荐
- DevExpress MVVM<1>
			DevExpress MVVM 概念 模型 -定义数据和您的业务逻辑. 视图 -指定UI,包括绑定到ViewModel中的属性和命令的所有可视元素(按钮,标签,编辑器等). ViewModel-连接模 ... 
- 前端开发规范:2-HTML
			HTML标签 文档声明,除非必须要兼容IE6等远古浏览器,否则一律使用HTML5文档类型申明<!DOCTYPE html> 标签闭合,img.br.hr 等自闭合标签不使用闭合斜杠 met ... 
- [PHP] Workerman中的注册树模式
			注册树模式是把对象挂到一个类的属性数组里,下次直接在这个数组里面取,保持全局唯一,一般在项目入口初始化的时候有用到.在workerman中一开始的就是个注册树模式的运用,下面是对他的模拟 <?p ... 
- [洛谷P1169][题解][ZJOI2007]午餐
			这是题目吗? 显然的DP,讲几个重要的地方 1.贪心:让吃饭时间长的先排队(证明从略) 2.状态: f[i][j][k]代表前i个人,一号时间j,二号时间k显然MLE 所以压缩成f[i][j]代表前i ... 
- Linux下安装Redis以及遇到的问题
			参考链接:https://www.cnblogs.com/zdd-java/p/10288734.html https://www.cnblogs.com/uncleyong/p/9882843.ht ... 
- SpringBoot开发准备工作,保存备用,
			application.properties server.port=8080 spring.thymeleaf.prefix = classpath:/static/ spring.thymelea ... 
- Java的BIO和NIO很难懂?用代码实践给你看,再不懂我转行!
			本文原题“从实践角度重新理解BIO和NIO”,原文由Object分享,为了更好的内容表现力,收录时有改动. 1.引言 这段时间自己在看一些Java中BIO和NIO之类的东西,也看了很多博客,发现各种关 ... 
- Exe4j 打包: this executable was created with an evaluation version of exe4j
			异常 this executable was created with an evaluation version of exe4j 异常.png 问题原因 当前打包使用exe4j未授权 解决方法 ... 
- 使用pip安装python库的几种方式
			操作系统 : CentOS7.5.1804_x64 Python 版本 : 3.6.8 1.使用pip在线安装 1.1 安装单个package 格式如下: pip install SomePackag ... 
- EF中存储过程的使用
			存储过程即用来完成一个特定功能的一段代码.它的优缺点 优点 存储过程可封装,并隐藏复杂的商业逻辑. 存储过程可以回传值,并可以接受参数. 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与 ... 
