HDU 5574 Colorful Tree】的更多相关文章

• 给出一棵树,每个点有初始的颜色,支持两种操作• 将一个点的子树染成一种给定颜色• 问一个点的子树里有几种不同的颜色 •…
/* HDU 6035 - Colorful Tree [ DFS,分块 ] 题意: n个节点的树,每个节点有一种颜色(1~n),一条路径的权值是这条路上不同的颜色的数量,问所有路径(n*(n-1)/2条) 权值之和是多少? 分析: 考虑单种颜色,这种颜色的贡献是 至少经过一次这种颜色的路径数 = 总路径数(n*(n-1)/2) - 没有经过这种颜色的路径数 求没有经过这种颜色的路径数,即这种颜色的点将整棵树分块,每个分块中的总路径数 */ #include <bits/stdc++.h> u…
Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1539    Accepted Submission(s): 616 Sample Input 3 1 2 1 1 2 2 3 6 1 2 1 3 2 1 1 2 1 3 2 4 2 5 3 6 Sample Output Case #1: 6 Case #…
题目链接 Problem Description There is a tree with n nodes, each of which has a type of color represented by an integer, where the color of node i is ci. The path between each two different nodes is unique, of which we define the value as the number of di…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6035 [题目大意] 给出一颗树,一条路径的价值为其上点权的种类数,求路径总价值 [题解] 单独考虑每一种颜色,答案就是对于每种颜色至少经过一次这种的路径条数之和. 反过来思考只需要求有多少条路径没有经过这种颜色即可. 直接做可以采用虚树的思想(不用真正建出来),对每种颜色的点按照 dfs 序列排个序, 就能求出这些点把原来的树划分成的块的大小. 在搜索的过程中我们保存每个颜色的父节点,一遍dfs…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6035 [题目大意] 给出一颗树,一条路径的价值为其上点权的种类数,求路径总价值 [题解] 我们计算单个颜色的贡献,那么就是经过该颜色至少一次的路径数量, 我们统计的时候在每个点记录以其为开始的路径的答案和, 统计的时候计算了点自身,同时有重复计算的部分,最后减去n除以2即可 那么我们只要在每种颜色的虚树上统计即可. 对于子树的贡献需要区间修改,我们在dfs序的差分数组上更改,最后求前缀和即可.…
题意:一棵有n个点的树,树上每个点都有颜色c[i],定义每条路径的值为这条路径上经过的不同颜色数量和.求所有路径的值的和. 可以把问题转化为对每种颜色有多少条不同的路径至少经过这种颜色的点,然后加和.求有多少条路径经过可以转换为总路径数-没有经过的路径数,只要求出没有经过的路径数就好了. 对于每一个相同颜色的点,它们将树割成一些个联通块,显然这些联通块内部之间的路径不会经过这种颜色. 于是问题转化为求点划分的联通块大小. 用类似于虚树的dfs办法,每次维护树上最左边的一段链,然后用栈进行数据的更…
题目链接 单独考虑每一种颜色,答案就是对于每种颜色至少经过一次这种的路径条数之和.反过来思考只需要求有多少条路径没有经过这种颜色即可. 具体实现过程比较复杂,很神奇的一个树形dp,下面给出一个含较详细注释的代码及对应的一组自造的数据以及图片来进行解释 欢迎交流,给出意见~~~ 数据 /*第二行的1 2 3在图中分别用红黄蓝来表示 15 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 1 3 2 4 2 5 3 6 3 7 4 8 4 9 5 10 5 11 6 12 6 13…
考虑到树上操作:首先题目要我们求每条路径上出现不同颜色的数量,并把所有加起来得到答案:我们知道俩俩点之间会形成一条路径,所以我们可以知道每个样例的总的路径的数目为:n*(n-1)/2: 这样单单的求,每条路径(n:2e5)无疑会爆: 这样我们假设所有路径上都存在所有的颜色,所有总的答案为n*(n-1)/2*n: 然后我们再在里面减去我们不需要的: 这里我们要运用虚树(当前图的信息整合而已)的思想,其实也没有建出一颗树: 对于一个顶点u,颜色为x,在它的子树内所有以颜色x为根的子树都要舍去://这…
/** 题目:hdu6035 Colorful Tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题意:给定一棵树,每个节点有一个颜色值.定义每条路径的值为经过的节点的不同颜色数.求所有路径的值和. 思路:看题解后,才想出来的.树形dp. 求所有路径的值和 = 路径条数*总颜色数(n*(n-1)*colors/2)-sigma(每种颜色没有经过的路径条数) 主要是求每种颜色没有经过的路径条数. 画一棵树,我直接用颜色值表示节点编号. 2…