AGC004F Namori 树形DP、解方程(?)】的更多相关文章

传送门 因为不会列方程然后只会树上的,被吊打了QAQ 不难想到从叶子节点往上计算答案.可以考虑到可能树上存在一个点,在它的儿子做完之后接着若干颜色为白色的儿子,而当前点为白色,只能帮助一个儿子变成黑色,所以需要寻求父亲的帮助,强制让父亲变为黑色若干次,然后将当前点和父亲同时反转成白色,然后将这个点和儿子一起反转成黑色. 所以设\(f_i\)表示\(i\)强制被染成黑色的次数,若\(f_i < 0\)表示要被强制染成白色\(-f_i\)次,转移:\(f_i = 1 - \sum\limits_{u…
看到同学在写一道树形dp,好奇直接拿来写,发现很不简单. 如图,看上去是不是很像选课,没错这不是选课,升级版吧,多加了点东西罢了.简单却调了一晚上和一上午. 思路:很简单强联通分量+缩点+树形dp.直接莽啊,发现强联通分量不是很会求,码力不好一直调.然后开始缩点,这个缩点就分成的讲究了你咋么缩都行反正是一张无向图不过要注意最后图是一个连通图,每个节点都会直接和间接和0(人造源点相连. 然后树上dp即可.很简单.树上dp出锅了,一直调,然后改成二叉树dp,还是wa. 发现缩点GG了根本不能那样缩,…
洛谷题目传送门 神仙思维题还是要写点东西才好. 树 每次操作把相邻且同色的点反色,直接这样思考会发现状态有很强的后效性,没办法考虑转移. 因为树是二分图,所以我们转化模型:在树的奇数层的所有点上都有一枚棋子,每次可以将棋子移向相邻的空位,目标状态是树的偶数层的所有点上都有棋子. 这样的互换总次数有没有一个下界呢? 我们求出\(a_i\)表示点\(i\)子树中棋子数量与空位数量之差(可以是负数),那么\(i\)的父边就至少要交换\(|a_i|\)次. 为什么呢?子树里面空位比棋子少的话,肯定要通过…
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱”. 两只老虎两只老虎,跑得快跑得快. 一只没有耳朵,一只没有尾巴. 真奇怪,真奇怪. Tmk也觉得很奇怪,因为在他面前突然出现了一群这样的老虎,有的没耳朵,有的没尾巴,不过也有正常的. 现在Tmk告诉你这群老虎的耳朵个数,尾巴条数,以及老虎的腿的数目,问你有多少只是正常的. 其中只有三种老虎: 第一…
蒟蒻大佬时隔三个月更新了!!拍手拍手 而且是更新了几篇关于DP的文章(RioTian狂喜) 现在赶紧学习和复习一下树形DP.... 树形DP基础:Here,CF上部分树形DP练习题:Here \[QAQ \] 在学习树形DP之前,我们先要搞清楚一个问题,什么是树?根据图论课上学到的知识我们知道,连通的无圈图称为树.而树我们可以把它近似第看成一个分形结构,这是说我们的树其实是可以递归定义的,树的每个子树也是一颗完整的树,而这种结构就天然地适合递归. 具体来说,在树形动态规划当中,我们一般先算子树再…
关于树形dp 我觉得他和线性dp差不多 总结 最近写了好多树形dp+树形结构的题目,这些题目变化多样能与多种算法结合,但还是有好多规律可以找的. 先说总的规律吧! 一般来说树形dp在设状态转移方程时都可以用f[i][]表示i这颗子树怎么怎么样的最优解,实现时一般都是用子树更新父亲(即从下向上更新), 那么首先应该考虑的是一个一个子树的更新父亲还是把所有子树都算完了再更新父亲?这就要因题而异了,一般来说有两种情况: 1.需要把所有子树的信息都掌握之后再更新子树的就需要把所有子树都算完了在更新父亲.…
树形DP.这是个什么东西?为什么叫这个名字?跟其他DP有什么区别? 相信很多初学者在刚刚接触一种新思想的时候都会有这种问题. 没错,树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上. 既然说了这是一种思想,那么单讲的话,也讲不出什么东西来.所以我们结合具体题目进行讲解,希望大家可以在题目中领悟这种思想. 提到树形DP入门题,很多人都会提到没有上司的舞会这道题,的确,这道题堪称树形DP的典范,但是我个人认为,这道题的处理方式不够普遍,二叉苹果树这道题的处理方式相比之下更加普遍.下面我…
一看到这道题就知道是树形dp 之前做过类似的题,只不过保护的范围是1 所以简单很多. 这道题保护的范围是2,就复杂了很多. 我就开始列状态,然后发现竟然有5种 然后我就开始列方程. 但是我考虑的时候是用一条链去思考的. 显然应该要用深度为3的完全二叉树去思考. 所以我写到一半发现自己的方程有问题. 然后就干脆放弃了,因为思维量好大. 然后去看题解.发现我完成了正解的三分之一. 后面的方程写出之后还需要很牛逼的简化. 我花了很长时间才理解. 自己还是太菜了.http://www.cnblogs.c…
好久没有写过题解了--现在感觉以前的题解弱爆了,还有这么多访问量-- 没有考虑别人的感受,没有放描述.代码,题解也写得歪歪扭扭. 并且我要强烈谴责某些写题解的代码不打注释的人,像天书那样,不是写给普通人看的. 原题点这(JZOJ) 描述 Description YJC最近在学习图的有关知识.今天,他遇到了这么一个概念:随机游走.随机游走指每次从相邻的点中随机选一个走过去,重复这样的过程若干次.YJC很聪明,他很快就学会了怎么跑随机游走.为了检验自己是不是欧洲人,他决定选一棵树,每条边边权为1,选…
1131: [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1150  Solved: 378[Submit][Status][Discuss] Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output 输出你所找到的点,如果具有多个解,请输出编号最小的那个. Sample Input…
/* 题意: 不要低头,不要放弃,不要气馁,不要慌张. PS:人生第一道自己独立做出来的树形dp... 给一棵树,标号1到n,每条边有两个权值,步行时间和驾车时间.车在1号点. 给m个必须访问的关键点,求从1号点出发,访问所有关键点一遍的最小时间. 注意车可以停在任意地方,但是只有1号点有一辆车,人最后也可以停留在任意点. 思路: 1.子树方向(注意dp1 dp2 dp4都是保证人一定要返回该点的最优解) dp1代表该点起始有车,并且从该点出发访问完该点子树上所有的关键点车和人都返回的该点的最优…
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…
链接 归属简单树形DP 挺简单的 跟第一道一样 就是我跑偏了题意..以为要覆盖点 纠结啊 推了N久 推不出啊 然后就郁闷了 打了局游戏 边想边打 实在想不出 看下题解 跑偏了 分两种情况D 方程见代码 #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stdlib.h> using namespace std; #define N…
题意 :给出一些上下级关系,要求i和i的直接上级不能同时出现,现在选出一些人构成一个集合,问你这个集合里面的最大人数是都少,同时给出这个最大的人数的集合是否唯一. 思路:树形DP,dp[i][0],表示以i为跟节点的子树,不取i时的最优解,dp[i][1]表示以i为跟节点的子树,取i时的最优解,再另设only数组,only[i][0]表示以i为跟节点的子树,不i时最  优解是否唯一,only[i][1]表示以i为跟节点取i时最优解是否唯一 #include<map> #include<c…
题目大意 给定一棵n个结点的树,问最少需要删除多少条边使得某棵子树的结点个数为p 题解 很经典的树形DP~~~直接上方程吧 dp[u][j]=min(dp[u][j],dp[u][j-k]+dp[v][k]-1) 方程的意思是 以u结点为根保留j个结点需要删除的最少的边的条数,那么可以选择在某个子结点v中选择k个保留,其他结点保留j-k个,为什么需要-1呢,因为相当于把子树v衔接到结点u上,因此边u->v是不需要删除的,所以要-1 代码: #include <iostream> #inc…
动态规划作为一种求解最优方案的思想,和递归.二分.贪心等基础的思想一样,其实都融入到了很多数论.图论.数据结构等具体的算法当中,那么这篇文章,我们就讨论将图论中的树结构和动态规划的结合——树形dp. 其实如果看过<背包九讲>或者看过笔者的文章<动态规划——背包问题>的读者会对树形dp有一定的了解,下面引用笔者在<动态规划——背包问题>中一个一段. “ 依赖背包问题的模型很简单,就是说对于某个物体,将它装入背包必须以装入一个物体做前提.这其实十分类似我们上文提到的分组背包…
T3:BFS 回看了一下Day1的T3...感觉裸裸的BFS,自己当时居然没有看出来... 同时用上升和下降两种状态bfs即可 这一题还要注意一个细节的地方,就是题目要求的是求往返的最优解 k=min(d[上升],d[下降]); ans=min(2*k+1,d1[]+d2[]); 输出ans..这个地方需要理解: 以及如果这个点在边缘地区(边界) 且这个点的高度为0 那么就不需要转化 其余的照bfs模板打即可: //刚开始以为是把每一个点都bfs一遍,看了标程之后发现有一个优很多的解法: 把出发…
[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的节点连接到的节点编号和这条网线的长…
本Lowbee第一次写树形DP啊,弱...一个变量写错半天没看出来...... 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了.所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数. 输入输出格式 输入格式: 第一行一个整数N.(1<=N<=600…
  这道题目是十分考验思维的,n^2应该还是比较好想的,主要是如何转移根的问题.转移根,在我看来应该是树形dp最难的一部分了, 一般学会如何转移根,也就差不多考验通吃树形dp了. 下面转一转大佬链接:http://blog.csdn.net/FromATP/article/details/53200240 题解 比较好想的树形DP..但是实现起来很多地方不是一般恶心...也许是ATP的方法太愚蠢了?总之好像当时考试的时候ATP最后半个小时想出来了但是没码完只好写了50pts部分分= =醉死了 那…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 题意:打洞洞收集脑子,你带领一个军队,洞洞互联成一棵树,每个洞中有一些bug,要全部杀死这些虫子才可以取得这个洞中的脑子,只有杀死当前节点的bug才可以继续走下去,且如果有0个bug你仍要派遣一个士兵在这里,只不过可以士兵不停留. 题解:很清晰明了的树形dp了,但是某些人说过写题解就要写细致...所以我们还是来详细讲解一下树形dp吧... 树形dp: 这是一个很裸的树形dp,和一般的dp不同的…
给定一个n个点的树,把其中一些点涂成黑色,使得对于每个点,其最近的黑点的距离不超过K. 树形DP. 设置状态f[i][j]: 当j <= K时: 合法状态,表示i的子树中到根的最近黑点距离为j的方案数. 当 K < j <= 2K时: 不合法状态,表示i的子树中,需要在上面补充黑点,且这个黑点到i的距离应该至多为(2K - j + 1). 对于这个状态的另外一种理解方式是:i的子树中,距离i最近的黑点距离超过K,距离i最远的黑点距离为j,方案数. 设计这样状态的动机在于: 如果仅仅有j…
树形DP和状压DP和背包DP 树形\(DP\)和状压\(DP\)虽然在\(NOIp\)中考的不多,但是仍然是一个比较常用的算法,因此学好这两个\(DP\)也是很重要的.而背包\(DP\)虽然以前考的次数挺多的,但是现在基本上已经成了人人都能AK的题了,所以也不经常考了. 树形DP 树形DP这个非常特殊,他好像和是唯一一个用深搜实现的DP,所以我们学好它也是应该的,其特点是通过深搜. 思路 先找到一个根节点,然后预处理出所有子树的大小. 然后深搜把最底层的子节点得状态处理出来. 递归回溯到根节点,…
洛谷 Codeforces 这题真是妙的很. 通过看题解,终于知道了\(\sum_n f(n)^k​\)这种东西怎么算. update:经过思考,我对这题有了更深的理解,现将更新内容放在原题解下方. 思路 发现\(\sum_S (f(S))^k\)这东西因为有个\(k\)次方,所以特别难算,考虑拆开: \[ x^k=\sum_{i=0}^k {x \choose i} \times i! \times S(k,i) \] 其中\(S(n,m)\)是第二类斯特林数,即\(n\)个元素放进\(m​\…
今天学了树形dp,发现树形dp就是入门难一些,于是好心的我便立志要发一篇树形dp入门的博客了. 树形dp的概念什么的,相信大家都已经明白,这里就不再多说.直接上例题. 一.常规树形DP P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了.所以…
树形DP入门 poj 2342 Anniversary party   先来个题入门一下~ 题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大. 解题思路: 任何一个点的取舍可以看作一种决策,那么状态就是在某个点取的时候或者不取的时候,以他为根的子树能有的最大活跃总值.分别可以用f[i,1]和f[i,0]表示第i个人来和不来. 当…
分析: 听说正解是FFT+线段树合并,然而我并不会... 我们来思考其他的方法. 我们要求的是连通块第k大的和 对于某一个连通块,对答案的贡献=val(Rank.K) 我们不好直接算出每个连通块的Rank.K是多少 但我们可以枚举一个limit for 1->w ,Σ(val(Rank.K)>=lim的连通块的个数)就等于答案 为什么呢,因为这样一个连通块就被统计了val(Rank.K)次. 剩下的进行树形DP,设dp[i][j]为以i为根的子树,选出j个权值>=limit的点的方案数.…
题目描述 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房(间).三个妹子住的房间要互不相同(否则要打起来了),为了让吉丽满意,你需要让三个房间两两距离相同.有多少种方案能让吉丽满意? 输入 第一行一个数n.接下来n-1行,每行两个数x,y,表示x和y之间有一条边相连. 输出 让吉丽满意的方案数. 样例输入 7 1 2 5 7 2 5 2 3 5 6 4 5 样例输出 5 提示 [样例解释] {1,3,5},{2,4,…
接着第四课的内容,加入部分第五课的内容,主要介绍树形dp和LRU 第一题: 给定一棵二叉树的头节点head,请返回最大搜索二叉子树的大小 二叉树的套路 统一处理逻辑:假设以每个节点为头的这棵树,他的最大搜索二叉子树是什么.答案一定在其中 第一步,列出可能性(最难部分) 1.可能来自左子树上的某课子树 2.可能来自右子树上的某课子树 3.整颗都是(左右子树都是搜索二叉树并且左子树最大小于该节点,右子树最小大于该节点) 第二步,收集信息: 1.左树最大搜索子树大小 2.右树最大搜索子树大小 3.左树…
二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置.下面是一颗有4个树枝的树 2 5 \ / 3 4 \ / 1 现在这颗树枝条太多了,需要剪枝.但是一些树枝上长有苹果. 给定需要保留的树枝数量,求出最多能留住多少苹果. 输入输出格式 输入格式: 第1行2个数,N和Q(1<=Q<= N,1<N<=100)…