首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
【bzoj1369】[Baltic2003]Gem(树形dp+结论)
】的更多相关文章
BZOJ1369:[Baltic2003]Gem(树形DP)
Description 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. Input 先给出一个数字N,代表树上有N个点,N<=10000 下面N-1行,代表两个点相连 Output 最小的总权值 Sample Input 10 7 5 1 2 1 7 8 9 4 1 9 7 5 6 10 2 9 3 Sample Output 14 Solution 结论题.权值标号不会大于$log2(n)…
【bzoj1369】[Baltic2003]Gem 树形dp
题目描述 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. 输入 先给出一个数字N,代表树上有N个点,N<=10000 下面N-1行,代表两个点相连 输出 最小的总权值 样例输入 10 7 5 1 2 1 7 8 9 4 1 9 7 5 6 10 2 9 3 样例输出 14 题解 树形dp f[i][j]表示第i个点权值为j时i的子树的最小权值和. 一开始以为颜色数最多有n种,n^3的dp算法…
【BZOJ-1369】Gem 树形DP
1369: [Baltic2003]Gem Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 282 Solved: 180[Submit][Status][Discuss] Description 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. Input 先给出一个数字N,代表树上有N个点,N<=10000 下面N-1行,代表两个点相连 Out…
BZOJ 1369: [Baltic2003]Gem(树形dp)
传送门 解题思路 直接按奇偶层染色是错的,\(WA\)了好几次,所以要树形\(dp\),感觉最多\(log\)种颜色,不太会证. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int N=10005; inline int rd(){ int x=0,f=…
BZOJ_1369_[Baltic2003]Gem_树形DP
BZOJ_1369_[Baltic2003]Gem_树形DP Description 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. Input 先给出一个数字N,代表树上有N个点,N<=10000 下面N-1行,代表两个点相连 Output 最小的总权值 Sample Input 10 7 5 1 2 1 7 8 9 4 1 9 7 5 6 10 2 9 3 Sample Output 1…
BZOJ1369/LG4395 「BOI2003」Gem 树形DP
问题描述 LG4395 BZOJ1369 题解 发现对于结点 \(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 <typen…
[bzoj1369][Baltic2003]Gem_树形dp_结论题
Gem bzoj-1369 Baltic-2003 题目大意:给你一棵树,让你往节点上添自然数,使得任意相邻节点的数不同且使得权值最小. 注释:n为结点个数,$1\le n\le 10^3$. 想法:呵呵,学长一直在骂结论题,我一直觉得没啥.. ... 知道tm碰见这玩意儿,卧槽?! 树上相邻节点不同色,颜色个数最小值至多为logn. 最后,附上丑陋的代码... ... #include <iostream> #include <cstring> #include <cstd…
bzoj 1369: Gem 树形dp
题目大意 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小.N<=10000 题解 我们可以猜一个结论,用到的编号不会超过某一个值 我们发现我们可以开到100以上都不会超时 所以我们把编号最多100算,跑树形dp即可 其实可以证明编号不会超过logn... Code #include <cstdio> #include <cstring> #include <algor…
[BOI2003] Gem - 树形dp
结论 不同颜色数不会超过 \(O(\log n)\) 然后就是很简单的树形dp了 顺便复习一下树形dp怎么写 #include <bits/stdc++.h> using namespace std; int f[10005][20]; vector<int> g[10005]; int n,t1,t2,vis[10005]; void dfs(int p) { vis[p]=1; for(int i=0;i<g[p].size();i++) { int q=g[p][i];…
【bzoj1369】[Baltic2003]Gem(树形dp+结论)
题目传送门:bzoj1369 这题其实有个结论:节点数为n的树,对其染色使相邻节点颜色不同,且总颜色权值最小,所需的颜色数量是$ O(\log n) $的. 所以我们就可以愉快的dp了:$ f[i][j] $表示处理到以$ i $为根的子树,根节点颜色为$ j $的最小总价值,然后就可以随便转移了. 代码: #include<cstdio> #include<cstring> #define maxn 10010 struct edge{ int to,nxt; }e[*maxn]…
[bzoj1369] [Baltic2003]Gem
结论题...一棵树里用到的颜色数不超过logn.. f[i][j]表示以i为根的子树里,i的颜色是j的方案数. g[i][j]表示max{f[i][k]},(k!=j #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; ,inf=1e9+; ];int tot,last[maxn]; ],g[maxn][]; int i,…
BZOJ 1304: [CQOI2009]叶子的染色 树形DP + 结论
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define maxn 1000000 #define inf 1000000000 using namespace std; int n,m,edges; int col[maxn],f[maxn][2],hd[maxn],to[maxn<<1],nex[maxn<<1]; void…
P4201-[NOI2008]设计路线【结论,树形dp】
正题 题目链接:https://www.luogu.com.cn/problem/P4201 题目大意 给出\(n\)个点的一棵树开始所有边都是白色,选出若干条没有公共点的路径将上面所有边变为黑色. 要求所有点到\(1\)号点的路径上经过的白色边的数量的最大值最小. 求最小值和方案数 解题思路 直接记录最小值的树形\(dp\)可以计算出第一个答案,但是第二个答案就有点麻烦了,因为有的不取最小值也不一定影响答案. 而可以发现如果按照树链剖分的思路来做答案是不会超过\(\log_2n\)的,进一步证…
蒟蒻的树形dp记录
POJ2342: 题意:某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大. 题解: 当i来的时候,dp[i][1] += dp[j][0];//j为i的下属 当i不来的时候,dp[i][0] +=max(dp[j][1],dp[j][0]);//j为i的下属 #include <cstdio> #include <cmath&g…
codeforces 212E IT Restaurants(树形dp+背包思想)
题目链接:http://codeforces.com/problemset/problem/212/E 题目大意:给你一个无向树,现在用两种颜色去给这颗树上的节点染色.用(a,b)表示两种颜色分别染的节点数.满足以下条件:1.任何一种颜色至少使用一次,即a>=1&&b>=1.2.两种颜色染的节点不能相邻,即不能有边的两端染不同色.要你使a+b值最大下输出不同的(a,b),按照a升序输出. 算法思路:很容易得出一个结论:a+b的最大值就是取n-1,即只有一个点不染色.我们就想到树…
[SinGuLaRiTy] 树形DP专项测试
[SinGuLaRiTy-1015] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有的题目:Time Limit:1s | Memory:256 MB 第一题:最长链(HDU 2196 Computer) 题目描述 给定一棵有n个节点的树,求每个节点到其他节点的最大距离. 输入 输入第一行是一个自然数n(n≤10000): 接下来 (n−1) 行描述:第i行包含两个自然数 , 表示编号为i的节点连接到的节点编号和这条网线的长…
[WC2018]通道——边分治+虚树+树形DP
题目链接: [WC2018]通道 题目大意:给出三棵n个节点结构不同的树,边有边权,要求找出一个点对(a,b)使三棵树上这两点的路径权值和最大,一条路径权值为路径上所有边的边权和. 我们按照部分分逐个分析有1.2.3棵树时的做法. 首先说一个结论,在下面讲解中能应用到: 对于一棵树T1的直径两端点为u,v,对于另一棵树T2的直径两端点为x,y,如果将两棵树合并(即将两棵树中的各一个点连边)那么新树的直径的两端点一定是u,v,x,y中的两个. 证明见树的直径及其性质与证明. 一.一棵树 这个很好做…
BZOJ5419[Noi2018]情报中心——线段树合并+虚树+树形DP
题目链接: [NOI2018]情报中心 题目大意:给出一棵n个节点的树,边有非负边权,并给出m条链,对于每条链有一个代价,要求选出两条有公共边的链使两条链的并的边权和-两条链的代价和最大. 花了一天的时间,终于搞定了这道题,不可否认这真的是一道神题,对思维和代码能力的考察都非常到位. 通过手画或者数据范围的特殊性质都不难发现两条有公共边的链的$LCA$要么相同要么不同(这不废话吗?) 而两条链的并的计算方法也可以按照上面两种情况来分类计算,我们先分别讨论两种情况的计算方法再考虑如何一起考虑两种情…
洛谷P4338 [ZJOI2018]历史(LCT,树形DP,树链剖分)
洛谷题目传送门 ZJOI的考场上最弱外省选手T2 10分成功滚粗...... 首先要想到30分的结论 说实话Day1前几天刚刚刚掉了SDOI2017的树点涂色,考场上也想到了这一点 想到了又有什么用?反正想不到最大的贡献是怎么推出来的 然后晚上心中怀着九条CNM看完了Solution.pdf 貌似对我这个蒟蒻来说也只有这一题可做了...... 已知书上每个点access的总次数,构造出一个顺序,最大化虚实边的切换总次数 其实如果能发现最优顺序的构造是没有后效性的话,问题便可以进一步简化 考虑每个…
BZOJ1304: [CQOI2009]叶子的染色 树形dp
Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到每个叶子的简单路径上都至少包含一个有色结点(哪怕是这个叶子本身). 对于每个叶结点u,定义c[u]为从根结点从U的简单路径上最后一个有色结点的颜色.给出每个c[u]的值,设计着色方案,使得着色结点的个数尽量少. Input 第一行包含两个正整数m, n,其中n是叶子的个数,m是结点总数.结点编号为1,2,…,m,其中编号1,2,…
[Baltic2003] Gem
[Baltic2003]Gem Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 501 Solved: 320[Submit][Status][Discuss] Description 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. Input 先给出一个数字N,代表树上有N个点,N<=10000 下面N-1行,代表两个点相连 Output 最小…
初涉树形dp
算是一个……复习以及进阶? 什么是树形dp 树形dp是一种奇妙的dp…… 它的一个重要拓展是和各种树形的数据结构结合,比如说在trie上.自动机上的dp. 而且有些时候还可以拓展到环加外向树.仙人掌上的酷炫操作. 好吧上面这些我都不会. 树形dp的例题 [简单dp]P2015 二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来描述一根树…
BZOJ_2443_[Usaco2011 Open]奇数度数 _并查集+树形DP
BZOJ_2443_[Usaco2011 Open]奇数度数 _并查集. Description 奶牛们遭到了进攻!在他们的共和国里,有N(1 <= N <=50,000)个城市,由M(1 <= M <= 100,000)条无向的道路连 接城市A_i和B_i(1 <= A_i <= N;1 <= B_i <= N;A_i != B_i; 不会有重复的道路出现).然而,整个共和国不一定 是连通的——有一些城市无法到达另外一些城市.入侵者想得到共和国的地图.(入…
HDU5834 Magic boy Bi Luo with his excited tree (树形DP)
题意:一棵树有点权和边权 从每个点出发 走过一条边要花费边权同时可以获得点权 边走几次就算几次花费 点权最多算一次 问每个点能获得的最大价值 题解:好吧 这才叫树形DP入门题 dp[i][0]表示从i节点的儿子中走又回到i的最大值 dp[i][1]表示不回到i的最大值 dp[i][2]表示不回到i的次大值 同时需要记录不回到i最大值的方向id[x] 很显然 第一遍dfs可以预处理每个节点往下的值 然后关键的就是每个节点从父亲这个方向的值怎么处理 有个很显然的结论就是 不回来是肯定比回来更优的 所…
提升——树形DP
这里讲提高一点的内容,所以没有树形DP基础的,先看一下基础部分: 浅说——树形DP 闲言不表,看第一题. 这道题是典型的树上最长链问题.(就是一个模板题) 给定一棵树,树上共有N个节点(N<=5000) ,树上节点的编号从1到N,每个节点的儿子个数最多为N-1. 请求出这棵树上的经过节点数最多的一条不重复的链. 输入: 第一行一个数N,表示树有N个节点. 接下来N行,每行第一个数为Xi(0<=Xi<=N-1),表示编号为i的节点的儿子个数为Xi,接下来Xi个数,依次表示每一个儿子的编号.…
树形dp专题总结
树形dp专题总结 大力dp的练习与晋升 原题均可以在网址上找到 技巧总结 1.换根大法 2.状态定义应只考虑考虑影响的关系 3.数据结构与dp的合理结合(T11) 4.抽直径解决求最长链的许多类问题(T12) 5.dp题最基本的考察是对题意模型的转化,以应用在各个方面 6.前缀和等技巧优化dp 7.树形背包是n*n的! T1 BZOJ1304 [CQOI2009]叶子的染色 首先是对于固定根节点的\(dp\) \(dp\)状态\(dp[3]\)为子树还需要颜色\(1,2\),或不需要 转移比较简…
loj2587 「APIO2018」铁人两项[圆方树+树形DP]
主要卡在一个结论上..关于点双有一个常用结论,也经常作为在圆方树/简单路径上的良好性质,对于任意点双内互不相同的三点$s,c,t$,都存在简单路径$s\to c\to t$,证明不会.可以参见clz博客..我就是跟着他学的 然后就好办了,转化为树上两点计经过点双内所有点个数,然后赋权后变为统计两两圆点对的路径权值和,这个就是一个树形DP,统计每个点作为圆点或者方点被所有路径经过多少次,加入答案.. 还是比较裸的,因为重点还在于这个很多题都出现到的点双的简单路径的性质.. #include<ios…
[集训队作业2018]蜀道难——TopTree+贪心+树链剖分+链分治+树形DP
题目链接: [集训队作业2018]蜀道难 题目大意:给出一棵$n$个节点的树,要求给每个点赋一个$1\sim n$之内的权值使所有点的权值是$1\sim n$的一个排列,定义一条边的权值为两端点权值差的绝对值,要求对于任意两点间的路径要么路径上所有点的点权单调,要么存在路径上的第三个点到这两个点的路径分别单调(即两点间路径先单调递增再单调递减或先单调递减再单调递增).求出整棵树最小边权和,并支持动态插入点之后完成上述问题. 前言: 这道题综合性比较强且代码量及细节非常多,是迄今为止我做过最神仙的…
树形dp专栏
前言 自己树形dp太菜了,要重点搞 219D Choosing Capital for Treeland 终于自己做了一道不算那么毒瘤的换根dp 令 \(f[u]\) 表示以 \(u\) 为根,子树内总共需要交换的边数, \(up[u]\) 表示以 \(u\) 为根,子树外总共需要交换的边数. Dfs1 求出 \(f[u]\) ,就有: \[f[u]=\sum_{v∈son[u]} f[v] + (edge[u->v] == 1)\] edge[u->v] 表示 u->v 这条边的方向是…
树形DP——动态规划与数据结构的结合,在树上做DP
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法与数据结构的第15篇,也是动态规划系列的第4篇. 之前的几篇文章当中一直在聊背包问题,不知道大家有没有觉得有些腻味了.虽然经典的文章当中背包一共有九讲,但除了竞赛选手,我们能理解到单调优化就已经非常出色了.像是带有依赖的背包问题,和混合背包问题,有些剑走偏锋,所以这里不多做分享.如果大家感兴趣可以自行百度背包九讲查看,今天我们来看一个有趣的问题,通过这个有趣的问题,我们来了解一下在树形结构当中做动态规划的方法. 这个问题题意很…