Codeforces 486D Valid Sets (树型DP)】的更多相关文章

题目链接:http://codeforces.com/problemset/problem/486/D 题意: 给你一棵树,n个节点,每个节点的点权为a[i]. 问你有多少个连通子图,使得子图中的max(a[i]) - min(a[i]) <= d. ps.连通子图的定义: 如果一个点集V为一个连通子图,则对于任意两点a,b∈V,有a到b路径上的所有点u∈V. 题解: 因为要保证max(a[i]) - min(a[i]) <= d,所以可以人为地选出一个点rt作为点权最大的点. 这样在求以rt…
题目链接 Valid Sets 题目要求我们在一棵树上计符合条件的连通块的个数. 满足该连通块内,点的权值极差小于等于d 树的点数满足 n <= 2000 首先我们先不管这个限制条件,也就是先考虑d为正无穷大的时候的情况. 我们要求出树上所有连通块的个数. 这个时候我们令f[i]为以i为根的子树中的连通块的数目. 此时状态转移方程为 f[x] = f[x] * (f[u] + 1) 其中f[x]初始值为1,u为x的儿子 最后f[1]的值(我们假设1为根结点)即为答案 时间复杂度为O(n) 注意到…
D. Valid Sets time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output As you know, an undirected connected graph with n nodes and n - 1 edges is called a tree. You are given an integer d and a tree…
题目链接 Tree $dp[x][i]$表示以x为根的子树中x所属的连通快大小为i的时候 答案最大值 用$dp[x][j]$ * $dp[y][k]$ 来更新$dp[x][j + k]$. (听高手说这类题的套路其实都差不多) 因为这题输出数据会很大所以用Java…… QAQ import java.util.*; import java.io.*; import java.math.*; public class Main{ static final int maxn = 710; stati…
题目链接 Coloring Brackets 考虑树型DP.(我参考了Q巨的代码还是略不理解……) 首先在序列的最外面加一对括号.预处理出DFS树. 每个点有9中状态.假设0位不涂色,1为涂红色,2为涂蓝色. 0:0 0 1:0 1 2:0 2 3:1 0 4:1 1 5:1 2 6:2 0 7:2 1 8:2 2 其中1.2.3.6为有效的状态. DP的时候如果当前括号下没有子括号那么这个状态方案数为1. 先处理出第一对括号.然后处理接下来的括号. 拼接的时候如果出现()() 中间两个括号同时…
题目链接  Round 322 Problem F 题意  给定一棵树,保证叶子结点个数为$2$(也就是度数为$1$的结点),现在要把所有的点染色(黑或白) 要求一半叶子结点的颜色为白,一半叶子结点的颜色为黑,求边权和的最小值. 若一条边连接的两个点颜色不一样,则该条边边权为$1$,否则为$0$. 考虑树型$DP$. $f[x][i][j]$表示当以$x$为根的子树中有$i$个叶子结点染成黑色并且$x$的颜色为$j$的时候边权和的最小值. 这道题计算$size$的时候只考虑叶子结点,不考虑除叶子…
题目描述 Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市.每条道路只能单向通行.现在政府需要决定选择哪个城市为首都.假如城市i成为了首都,那么为了使首都能到达任意一个城市,不得不将一些道路翻转方向,记翻转道路的条数为k.你的任务是找到所有满足k最小的首都. 输入输出格式 输入格式 输入包含多个测试点.对于每个测试点,每个测试点的第一行为一个正整数n(2<=n<=2e5).接下来n-1行,每行两个正整数ai,bi,表示城市a到城市b有一条单向通行的道路.输入以…
题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. 树上的每个结点作为其子树的根可以有三个状态: 不属于支配集且还没被支配 不属于支配集但被其孩子支配 属于支配集 那么就是用dp[u][1\2\3]来作为动归的状态,表示结点u为根子树的且u状态为1.2.3的最小支配数. 123转移该怎么转移就怎么转移..最后的结果就是min(dp[root][2],…
好久没写树型dp了...以前都是先找到叶子节点.用队列维护来做的...这次学着vector动态数组+DFS回朔的方法..感觉思路更加的清晰... 关于题目的第一问...能邀请到的最多人数..so easy了...很基础的树形DP..dp[k][0]表示以k为根的子树不选k点时的最大人数...dp[k][1]代表选k点时的.... 关键是题目要求判断是否最优解唯一...首先如果状态a可以转移到状态b并且状态a达到最优方案的方式不唯一....那么转移得到的b最优方案的方式也必然不唯一...那么可以用…
题目描述 给你一棵树,你要从\(1\)号点出发,经过这棵树的每条边至少一次,最后回到\(1\)号点,经过一条边要花费\(w_i\)的时间. 你还可以乘车,从一个点取另一个点,需要花费\(c\)的时间. 你最多做\(k\)次车. 问最短时间. \(k\leq n\leq 20000,w,c\leq 50000\) 题解 我们考虑把最终路线中坐车的部分替换成走路. 那么显然不会经过一条边超过两次. 但是每条边都要经过者少一次,所以每条边只能被一个坐车的路线覆盖. 所以我们要选择不超过\(k\)条不相…