树形动规
文章平均质量分 55
WerKeyTom_FTD
我是一只来自中山纪念中学高三的oier,请多多指教
展开
-
轮舞前夕
题目大意及模型转换一棵由N个节点组成的有根树,根节点为1。现在在一个节点上放一盏灯,将会照亮该节点以及该节点的儿子与父亲。输出最少放多少灯,有多少种方案,能让所有节点被照亮。简单的树形DP可以设f[i]表示在节点i放灯,整个以i为根的子树都被照亮至少放多少灯。设g[i]表示在节点i不放灯,节点i被儿子照亮,整个以i为根的子树都被照亮至少放多少灯。设h[i]表示在节点i不放灯,节点i应被父亲照亮,目前原创 2015-08-12 20:57:09 · 701 阅读 · 0 评论 -
[bzoj4033]树上染色
题目描述有一棵点数为N的树,树边有边权。给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色。将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的和的收益。 问收益最大值是多少。DP首先贡献很恶心,但我们可以这样考虑,只考虑每条边的贡献。 设f[i,j]表示以i为根的子树中染黑了j个点的最大贡献,这里只考虑了子树中每条边以及i的父亲原创 2017-05-04 22:11:47 · 832 阅读 · 0 评论 -
[bzoj3727]PA2014 Final Zadanie
题目大意一颗n个节点的树。 bi=∑nj=1aj∗dis(j,i)bi=\sum_{j=1}^naj*dis(j,i) 给定b,请求出a。好题设size表示子树的a值和。设x表示整颗树a值和。 那么对于i是j的父亲,有 b[i]−size[j]+x−size[j]=b[j]b[i]-size[j]+x-size[j]=b[j] x−2∗size[j]=b[j]−b[i]=c[j]x-2*s原创 2017-04-06 14:37:45 · 670 阅读 · 0 评论 -
机器人游戏
题目描述小A和小B在一个R行S列的棋盘上玩游戏,棋盘上的每一个棋格都有一个方向标记(上、下、左或右)。游戏按如下方式进行: 小A先将K个棋格涂上黑色(初始为白色),并且他不能涂黑最后一列的棋格;随后,小B在第一列的任意一个棋格上放一个小机器人;此时,小机器人将会不停地沿着他所在的棋格所指示的方向走到一个相邻的棋格,直到他到达最后一列的棋格,游戏结束。 游戏胜负规则如下: ●如果小机器人最终到达原创 2017-04-06 09:49:16 · 538 阅读 · 0 评论 -
奶酪
题目描述CJY很喜欢吃奶酪,于是YJC弄到了一些奶酪,现在YJC决定和CJY分享奶酪。 YJC弄到了n-1块奶酪,于是他把奶酪挂在了一棵n个结点的树上,每根树枝上挂一块奶酪,每块奶酪都有重量。 YJC和CJY决定这样分奶酪:首先砍掉一根树枝,把树分成两部分,每人取一部分,然后各自在自己取的那部分树上选择一条路径并取走路径上的奶酪,然后把剩下的奶酪拿去喂老鼠。 两人都想让自己取走总重量尽量大的奶原创 2017-04-18 11:33:37 · 1989 阅读 · 0 评论 -
跳蚤王国
题目描述跳蚤王国爆发了一场动乱,国王在镇压动乱的同时,需要在跳蚤国地方钦定一个人来做宰相。 然而当时国王的钦定方式很奇怪,跳蚤王国可以看成一棵树,国王认为宰相必须更好地位跳蚤服务,所以他会选择一个到所有节点距离和最小的节点,并在这个节点中钦定,如果有多个节点满足距离和最小则任选一个。 然而跳蚤国的动乱实在是太厉害了,以至于树的心态可能也会发生改变也就是说,树上可能会有若干条边消失,如果这个情况出原创 2017-03-25 16:45:47 · 821 阅读 · 0 评论 -
[CF671D]Roads in Yusland
题目大意一颗n个节点的树所有边都坏掉了。 请m个工人修路,每个工人都可以修一条树链ui到vi,费用为ci。 求最小修路费用,无法全部修复输出-1。DP我们来设f[i]表示i子树全都修好(包括i到父亲那条边)的最小费用。 怎么转移呢? 比如有一个能修i到其父亲边的工人j,费用是这个工人的费用+其他杂七杂八的子树的f值和。 用线段树来维护,大概是这样吧QAQ贪心我们来看看一个强做法! 首先可原创 2017-03-07 17:16:40 · 1030 阅读 · 0 评论 -
[bzoj4543/3522]Hotel
题目大意一颗n个节点的树。 找三个不同编号的节点,使它们两两间距离相同(一条边距离视作1),求方案数。 在3522的版本中,n<=5000 在4543的版本中,n<=1000003522我们来考虑DP 用f[i,j]表示以i为根的子树里与i距离为j的点的个数。 g[i,j]表示在以i为根的子树里,有多少对(x,y)满足x与y到它们lca的距离均为d,且i到它们的lca距离为d-j(容易看出原创 2017-02-28 12:26:03 · 1415 阅读 · 0 评论 -
Tree
题目大意有一颗点权树,选择k条点不相交的树路径,价值为覆盖点的点权和除以k+1。 现在你可以给每个点的点权由x变成(x+c)%lim。0<=c<=m。 保证m<lim,x<limm<lim,x<lim。 求最大价值。分数规划先考虑不改变点权或是说点权已知的做法。 怎么做都发现如果要求用几条树路径的最大价值,都无法很快的做。 因此正解肯定不用求用多少每条树路径的最大价值。 考虑分数规划。二原创 2016-12-24 16:47:19 · 481 阅读 · 0 评论 -
[bzoj4899][WerKeyTom_FTD的模拟赛]记忆的轮廓
某蒟蒻WerKeyTom_FTD的模拟赛第三题《记忆的轮廓》原创 2016-11-03 21:31:02 · 1853 阅读 · 0 评论 -
[bzoj4835]遗忘之树
题目描述定义任意两点之间存在唯一路径的无向图是树。对于一棵n个点的树,如果删掉某个点u之后每个连通块的大小均不 超过n/2,那么称u为这棵树的重心。现在有一棵n个点的树T,利用过程P来构造一个n个点的有向图G,初始G没有边 。现在对T调用过程P,P的内容如下: 1:删去u,对每个连通块递归调用过程P; 2:对每个连通块,如果它的标号最小的重心为v,那么在图G中连一条u到v的有向边。 3:现原创 2017-05-20 09:06:59 · 459 阅读 · 0 评论 -
[bzoj4987]Tree
题目大意从前有棵树。 找出K个点A1,A2,…,Ak。 使得∑dis(AiAi+1),(1<=i<=K-1)最小。DP结论一:一定是找一个大小为k的联通子树。 结论二:最优答案一定是所有边权和*2-直径长度。 我们把直径的两个端点叫做关键点。 然后不妨dp,设f[i,j,k]表示子树i里选择了一个包含i的联通子树,含有j个点,选择了k个关键点的最小值。 合并时用枚举size法合并复杂度是原创 2017-12-12 21:09:23 · 853 阅读 · 0 评论 -
树
题目大意一颗点权树,有多少种将树划分成若干条路径的方法,使得每条路径点权和非负?做法不妨设f[i]表示i子树里全部成功覆盖方案数,g[i]表示i子树里除了i全部成功覆盖方案数。 g就是各个子树的f乘积。 f可以枚举lca穿过当前点的一条路径,设为j->k,那么j和k都贡献g,其余挂着的子树贡献f,乘起来即可。 这样太慢了。 考虑简单问题。 如果路径是j->i怎么做呢? 可以尝试对每个子树原创 2017-11-23 15:21:30 · 588 阅读 · 0 评论 -
[arc063e]Integers on a Tree
题目大意一颗点权树,相邻节点点权差绝对值为1。 现在一些点点权已确定,构造一种方案。做法自下而上推出每个节点点权区间范围。 为空则无解,同时如果儿子间对该点奇偶性要求不同也无解。 然后接下来只需自上而下构造,只要和父亲相差1,且点权在区间范围内一定可以合法。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i原创 2017-11-16 21:03:31 · 657 阅读 · 0 评论 -
[arc079f]Namori Grundy
题目大意一个有向弱联通环套树。 一个点的sg值等于出边连向点的sg值的mex。 试问是否有办法给每个点分配sg值?做法先把环上每个点i处理出两个值b[i]和c[i],b[i]表示其所连向的环上点j的sg值sg[j]如果不等于b[i],那么sg[i]=b[i],否则sg[i]=c[i]。 任找一条环边u->v,枚举sg[u]=b[u]或c[u]两种情况,有一种合法即可,否则不可能合法。#incl原创 2017-11-03 11:44:47 · 569 阅读 · 0 评论 -
[agc009b]Tournament
前言简单题。题目大意若干轮比赛,每个人在某一轮可以参赛,和另外一个人pk,输的人淘汰。 最后1是冠军,已知其余每个人输给了谁,请问最少设置多少轮比赛?做法你显然可以根据每个人输给了谁建一颗树,然后处理f[x]表示x淘汰所有输给他的人所需要的最小轮数。 转移很简单,根据儿子的f排序,然后详见代码(不会说)。#include<cstdio>#include<algorithm>#define f原创 2017-10-17 22:12:40 · 702 阅读 · 0 评论 -
[CF538E]Demiurges Play Again
题目大意懒得写题解同51nod树上的博弈#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=200000+10;int f[maxn],d[maxn],h[maxn],go[maxn],next[maxn];int i,j,k,l,原创 2017-06-15 14:52:39 · 785 阅读 · 0 评论 -
[hdu5181]numbers
题目大意把1~n顺序入栈,你可以决定出栈序列。 有m组关系,每组关系限制j要在k之前出栈。DP首先有个坑点请先判掉,就是存在限制j=k就输出0。。 我们考虑入栈出栈序列。 1入栈,写一个1。 2入栈,写一个2。 3入栈,写一个3。 3出栈,写一个3。 类似这样可以写出一个进出栈序列。 如果我们在最前和最后都加1个0,还可以看做是一个括号序列,也就是一颗以0为根节点的树。 这颗树有以原创 2017-06-13 17:42:06 · 617 阅读 · 0 评论 -
无心行挽
题目描述“What’s left to do when we’ve lost all hope?” “若内心万念俱灰,是否注定无心行挽?” ——来自网易云音乐 不必做好输掉一切的准备。 所以,无畏结局。 在尽头,已经不能再做什么,来挽回。 在尽头,所有的一切都走向简化,没有了重复,没有了错杂,只剩下一片废墟。 就是说,世界曾是一副错杂的无向图,而在尽头,它已成为一个没有环的无向连通图,原创 2017-06-13 15:23:25 · 15151 阅读 · 0 评论 -
[51nod 1527]城堡迷阵
题目描述链接偏序性设num表示一个子树游历完的时间,f表示一个节点连往父亲的边的权值。g表示一颗子树根节点认为是时刻0,游历整个子树的最小t值和。 对于相邻两个游历儿子y和z,交换y和z不会更优的条件(假设这时经过了t的时间): (t+f[y])∗size[y]+g[y]+(t+f[y]∗2+num[y]+f[z])∗size[z]+g[z]<(t+f[z])∗size[z]+g[z]+(t+f原创 2016-12-12 22:22:26 · 610 阅读 · 0 评论 -
[51nod 1531]树上的博弈
题目描述有一棵n个点的有根树,他有m个叶子结点(叶子结点是那些没有孩子的结点)。边由父亲指向孩子。数字1到m被分配到每一个叶子中。每一个叶子有一个数字,并且每一个数字恰好被分配到一个叶子中。 刚开始的时候根部有一个棋子。两个玩家轮流移动棋子,每一步都会将这个棋子向他的某一个孩子移动;如果玩家不能再移动棋子了,那么游戏结束。游戏的结果就是棋子所在叶子上面的数字。游戏的先手想要这个数字最大化,而后手想原创 2016-12-12 22:16:16 · 1309 阅读 · 0 评论 -
搬家
题目描述dp把两扇门之间那条链拉出来。 设f[l,r]表示链上的[l,r]都被攻略了的方案数,经典组合数转移。 要预处理链上每个节点延伸出去的子树方案。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespac原创 2016-07-15 21:57:28 · 473 阅读 · 0 评论 -
[bzoj十连测第二场 A]深邃
题目大意一棵树每个节点有颜色。 请将树分成若干连通块,使每个连通块均包含黑点。最小化最大的连通块的大小。二分看到双最直接二分。 二分了一个k,接下来怎么判定? 设f[i]表示以i为根的情况: 1、f[i]为正数,表示以i为根的子树内除了i所在连通块均合法,i所在连通块包含黑点时i所处连通块大小的最小值。 2、f[i]为负数,表示以i为根的子树内除了i所在连通块均合法,i所在连通块不包含黑点原创 2016-07-04 19:47:08 · 974 阅读 · 0 评论 -
[bzoj3572][HNOI2014]世界树
题目描述世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界。在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息、持续运转的根本基石。 世界树的形态可以用一个数学模型来描述:世界树中有n个种族,种族的编号分别从1到n,分别生活在编号为1到n的聚居地上,种族的编号与其聚居地的编号相同。有的聚居地之间有双向的道路相连,道路的长度为1。原创 2016-06-28 20:00:04 · 757 阅读 · 0 评论 -
树的难题
题目大意一颗树有n个结点,每个结点有黑白灰其中一种颜色。 要求你删去树中若干条边,使得形成的森林中每一颗树都没有白色结点或至多有一个黑色结点。删去一条边的代价为该边的边权,最小化代价。树形DP注意到一个合法的联通块的任意子联通块也符合条件。 所以树形DP,设f[i],g[i],h[i]表示将以i为根的子树分成合法森林,i结点所在联通块有0个黑点、1个黑点、0个白点的最小代价。 转移方程很容易了原创 2016-05-17 19:07:56 · 543 阅读 · 0 评论 -
[bzoj3167][HEOI2013]SAO
题目大意现在有N个点,两个点之间存在有向关系。无视关系的方向性后,N个点组成一颗树。现在问对该图做拓扑排序有多少种方法?N当作树一样考虑我们无视方向,把它当作一颗树,随意找一个点作根然后进行处理。 假设当前做到点x,先将x所有子树都做完,再把x与子树两两合并。 于是现在摆在我们面前的问题是:如何用状态表示一个图,并能快速实现合并两个只存在一条联系的图? 我们用f[i,j]表示原创 2015-12-21 20:18:47 · 1665 阅读 · 0 评论 -
[bzoj4271]化学
题目描述高中化学总要留下点什么才好……于是有了这题(其实搞的原题)。 烷烃,即饱和烃(saturated group),是只有碳碳单键和碳氢键的链烃,是最简单的一类有机化合物。 化学上,同分异构体是一种有相同化学式,有同样的化学键而有不同的原子排列的化合物。简单地说,化合物具有相同分子式,但具有不同结构的现象,叫做同分异构现象;具有相同分子式而结构不同的化合物互为同分异构体。很多同分异构体有相似原创 2016-03-04 20:36:06 · 2778 阅读 · 1 评论 -
[bzoj3566][SHOI2014]概率充电器
题目大意N个充电器连成一棵树。 第i个充电器有p[i]的概率直接充电。 每条导线有一定几率可以导电。 可以导电的导线形成的联通块中只要存在直接充电的结点整个联通块的充电器均进入充电状态。 问期望进入充电状态的充电器个数转化为有根树显然可知我们只需要得到f[i]表示i进入充电状态的概率 那么ans=∑f[i]ans=\sum f[i] 我们把无根树变有根树。 设a[i]=P(i与i的父亲原创 2016-03-19 13:13:40 · 779 阅读 · 0 评论 -
宝藏
题目大意及模型转换给定一颗由N个结点组成的树,并有q组询问,每个询问给定a0,a1…ap,求初始站在a0,接下来去a1,再去a2,一直到ap的期望耗时。每条边经过需要花费一个单位时间,站在一个点上,下一步走动会随机等概率选择一个相邻结点。暴力作法显然答案为每一对从ai到ai+1的期望时间之和。那么我们每次将ai当作根,开始搜索。每一个点我们都设出它前往ai+1的期望时间,然后通过递归处理解出方程,将原创 2015-09-21 22:05:34 · 791 阅读 · 0 评论 -
[51nod 1412]AVL树的种类
题目大意求有多少种节点个数为n的AVL树。吼简单求有多少个节点为n的树,容易想到f[i]表示用i个节点弄出一颗树。 而AVL有神奇性质,我们要设f[i,j]表示深度为ij个节点。 那我不是n^3? AVL学好了,你容易知道AVL的深度是log n的。 所以是n^2 log n的复杂度。#include<cstdio>#include<algorithm>#include<cmath>#原创 2016-08-17 16:35:12 · 819 阅读 · 0 评论 -
挺进
题目大意给出一颗边权树,问你删除一条边然后将两部分直径相加的最大值为多少。DP我们知道求直径的dp方法: f1[x]表示x往下走的最长链,f2[x]表示x往下走不与f1路径相交的最长链。 一颗树的直径长度=∑ni=1f1[i]+f2[i]\sum_{i=1}^nf1[i]+f2[i] 其中f1[i]+f2[i]表示在i的子树中,经过i的最长路径。 现在我们对于本题,一个子树内的直径,可以额外原创 2016-09-18 17:27:15 · 654 阅读 · 0 评论 -
[hackerrank]Unique Divide And Conquer
题目大意有多少种不同的n个节点的带编号无根树点分治过程唯一?DP设f[i]表示i个节点时的答案。 g[i]表示i个节点组成的森林,森林中每一个棵树都是点分治过程唯一的,而且是有根树,有多少种。 对于f的计算,首先重心有i种编号,然后思考除去重心后的森林部分,可以用g[i-1]表示除了该层外点分治过程唯一的方案,然后减去非法的情况。 非法情况包括:删去点不是重心,点分治过程不唯一。 两种情况可原创 2016-11-15 16:01:06 · 557 阅读 · 0 评论 -
随机游走
题目描述YJC最近在学习图的有关知识。今天,他遇到了这么一个概念:随机游走。随机游走指每次从相邻的点中随机选一个走过去,重复这样的过程若干次。YJC很聪明,他很快就学会了怎么跑随机游走。为了检验自己是不是欧洲人,他决定选一棵树,每条边边权为1,选一对点s和t,从s开始随机游走,走到t就停下,看看要走多长时间。但是在走了10000000步之后,仍然没有走到t。YJC坚信自己是欧洲人,他认为是因为他选的原创 2016-11-14 21:06:51 · 2779 阅读 · 2 评论 -
最大匹配
题目大意求树的最大匹配及最大匹配数量。DP设f[i,0~1]表示i子树中进行匹配,i参与匹配的最大匹配及数量。 g[i,0~1]类似,不过i不参与匹配。 h[i,0~1]由f和g得到,表示无管i是否参与匹配。 h由f和g得到,我们只思考如何求f和g。 g很容易求。 对于f,找到儿子中g[j,0]-h[j,0]最大的,然后加上所有儿子h的和再加1就是最大匹配。最大匹配数量要除去作为和i匹配的原创 2016-11-12 11:29:16 · 471 阅读 · 0 评论 -
label
题目描述DP很容易想到朴素DP 容易观察到DP数组有对称轴,而且中间一大段都是相等的,这个也易证。 于是就可以DP了。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;typedef lo原创 2016-10-29 18:51:36 · 655 阅读 · 0 评论 -
[bzoj4401]块的计数
题目大意给定一颗树,对树进行树分块使得每块点数相同,求方案数TLE算法容易观察出,假如块大小定了,那么至多只有一种方案。 怎么分块呢?设size[x]表示x子树中还未被分块的节点数量。 像普通size一样求。 退出x时,如果size[x]=c即块大小,那么可以形成一块,size[x]清0。 最后若size[1]为0,代表分块成功。 复杂度n根号n,TLE#include<cstdio>#原创 2016-11-09 20:44:55 · 781 阅读 · 0 评论 -
tree
题目描述给一棵n 个结点的有根树,结点由1 到n 标号,根结点的标号为1。每个结点上有一个物品,第i 个结点上的物品价值为vi。 你需要从所有结点中选出若干个结点,使得对于任意一个被选中的结点,其到根的路径上所有的点都被选中,并且选中结点的个数不能超过给定的上限lim。在此前提下,你需要最大化选中结点上物品的价值之和。 求这个最大的价值之和。树形依赖首先把树线性化,就原创 2016-10-06 07:55:18 · 537 阅读 · 0 评论 -
富爷说是一颗树
题目描述富爷说来一棵树,于是大头栽了一棵树。树大了,有n个点和n - 1条边,任意两个点都是联通的,点的标号为1 - n。爱树的大头和富爷在树上安居乐业,但大头住在u,而富爷住在v,他们都很不高兴,因为u到v有且只有一条简单路径。 当然了,树王富爷找到了解决办法,他打算带着大头再给树建一条边(保证不是自环),而且他们会在n * (n - 1) / 2的方案中随机选择一种。 但,要让富爷和大头开心原创 2016-09-21 22:44:22 · 479 阅读 · 0 评论 -
[bzoj4182]Shopping
题目大意有一颗树,每个节点相当于是一种物品,有三个因素价值、价格、个数。 在树上选一个联通块,然后做多重背包,要求每种物品必须选。 求最大价值。点分治我们进行点分治。 对于分治中心,要么在联通块中,要么不在。 不在的情况就是递归继续处理。 在的话,以分治中心为根造一颗树,然后做依赖多重背包。 具体做法是,在dfs序上弄,对于i,选i+1就到i+1,不选直接到i+size[i+1] 现在原创 2016-09-25 12:01:03 · 1158 阅读 · 0 评论 -
[UOJ#84]水题走四方
题目大意一颗树,两个人初始从根节点出发,每一步每个人可以选择原地不动或者走向某个儿子。一步后,一个人可以瞬移到另一个人所在节点上。 最少需要多少步,使得每个节点都被遍历过?做法我们可以认为存在一个本体以及一个分身,每次都是分身瞬移到本体的位置。 如果本体A和分身B在节点C分道扬镳,本体A在D节点瞬移至分身B所在的节点E,干脆一开始便让本体A往E走,分身B往D走。因此瞬移的总是分身。 最后一定是原创 2018-04-12 11:32:02 · 689 阅读 · 0 评论