【BZOJ-1369】Gem 树形DP
1369: [Baltic2003]Gem
Time Limit: 2 Sec Memory Limit: 64 MB
Submit: 282 Solved: 180
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
7 5
1 2
1 7
8 9
4 1
9 7
5 6
10 2
9 3
Sample Output
HINT
Source
Solution
简单的树形DP
$dp[i][j]$表示节点$i$染颜色$j$时的最小
随便转移一下...自己一开始认为就是一层1一层2但是发现好像不对,不可能这么naive,但是又实在不知道极限是多少...
PS求路过的人教我如何证明最大为3...
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define maxn 10010
int N,ans;
struct EdgeNode{int next,to;}edge[maxn<<];
int head[maxn],cnt;
void add(int u,int v)
{
cnt++;
edge[cnt].next=head[u]; head[u]=cnt; edge[cnt].to=v;
}
void insert(int u,int v) {add(u,v); add(v,u);}
int dp[maxn][];
void DFS(int now,int fa)
{
for (int i=; i<=; i++) dp[now][i]=i;
for (int i=head[now]; i; i=edge[i].next)
if (edge[i].to!=fa) DFS(edge[i].to,now);
for (int i=; i<=; i++)
for (int j=head[now]; j; j=edge[j].next)
if (edge[j].to!=fa)
{
int nowc=;
for (int k=; k<=; k++)
if (k!=i) nowc=nowc==?dp[edge[j].to][k]:min(nowc,dp[edge[j].to][k]);
dp[now][i]+=nowc;
}
}
int main()
{
N=read();
for (int u,v,i=; i<=N-; i++) u=read(),v=read(),insert(u,v);
DFS(,);
for (int i=; i<=; i++) ans=ans==?dp[][i]:min(ans,dp[][i]);
printf("%d\n",ans);
return ;
}
【BZOJ-1369】Gem 树形DP的更多相关文章
- bzoj 1369: Gem 树形dp
题目大意 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小.N<=10000 题解 我们可以 ...
- BZOJ 1369: [Baltic2003]Gem(树形dp)
传送门 解题思路 直接按奇偶层染色是错的,\(WA\)了好几次,所以要树形\(dp\),感觉最多\(log\)种颜色,不太会证. 代码 #include<iostream> #includ ...
- 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 ...
随机推荐
- 【MySQL】使用trim函数删除两侧字符
第一个LEADING,可以删除左侧指定的字符以及字符串 SELECT trim(LEADING '/' FROM `path`) 第二个TRAILING,可以删除右侧的指定字符以及字符串 SELECT ...
- [转]IIS添加MIME扩展类型及常用的MIME类型列表
http://www.cr173.com/html/18997_1.html 经常我在用IIS做为下载服务器的时候有时传上去的文件比如 xxx.iso 文件名名是传上去了,但是用http打开的时候确显 ...
- TopCoder
在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...
- java调用.net asmx / wcf
一.先用asmx与wcf写二个.net web service: 1.1 asmx web服务:asmx-service.asmx.cs using System; using System.Coll ...
- struts2: config-browser-plugin 与 convention-plugin 学习
struts2被很多新手诟病的一个地方在于“配置过于复杂”,相信不少初学者因为这个直接改投Spring-MVC了.convention-plugin. config-browser-plugin这二个 ...
- 【Flex】正则表达式
1.基本语法 . 匹配除换行符"\n"外的任意单个字符. * 匹配前面Flex正则表达式的零次或多次出现.eg:Alert.show("ThisBookIsGoodBoo ...
- HTML5+JS 《五子飞》游戏实现(四)夹一个和挑一对
在第一章我们已经说了怎么才能“夹一个”以及怎样才能挑一对,但那毕竟只是书面上的,对码农来讲,我们还是用代码讲解起来会更容易了解. 为了更容易对照分析,我们先把路线再次贴出来: // 可走的路线 thi ...
- SQLServer中的事务与锁
事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁:是数据库性能的 ...
- ASP.NET 问题集锦
[1]解决错误:从客户端(Content="<p>测试</p>")中检测到有潜在危险的 Request.Form 值 .NetFrameWork ...
- Socket,TCP/IP,UDP,HTTP,FTP
1.Socket:套接字,是传输层协议的一种编程API 作用:用于描述IP地址和端口,区分来自不同应用程序的通信,实现数据传输的并发服务 JDK Socket:在java.net包下有两个类Sock ...