luoguP2664 树上游戏】的更多相关文章

题目链接:https://www.luogu.org/problem/P2664 题意:给定一颗带点权的树,结点数n<=1e5,点权<=1e5,用s(i,j)表示从i到j的路径上不同点权数,ans[i]=sum(s(i,j)).求ans数组. 思路: 继续肝淀粉质,太难了. 涉及到树上点对,且nlogn满足时,就可以考虑考虑点分治了.所以回到这题,我们需要在O(n)时间内统计出以p为根节点的子树上所有节点对p的贡献,以及对所有经过p的路径的贡献. 我们通过dfs1得到这些贡献值和他们的和sum…
https://www.luogu.org/problemnew/show/P2664 考虑对于每种颜色包含的点和这些点的子节点建出虚树,发现只要将一个联通块中的东西 Dp + 差分一下就行了 当然要考虑哪些东西要被加进去 如果把不是一个颜色的联通块放在一起加,里面就要算上 n - 联通块大小的贡献(画个图就行了 然后输出的时候每个点的贡献要 + n (因为自己对任何一个点的连边肯定包含自己这种颜色 博主差分的时候写挂了导致要 #define int long long,而且常数巨大 #incl…
应该是一道中等难度的点分?麻烦在一些细节. 题目描述 lrb有一棵树,树的每个节点有个颜色.给一个长度为n的颜色序列,定义s(i,j) 为i 到j 的颜色数量.以及 现在他想让你求出所有的sum[i] 输入输出格式 输入格式: 第一行为一个整数n,表示树节点的数量 第二行为n个整数,分别表示n个节点的颜色c[1],c[2]……c[n] 接下来n-1行,每行为两个整数x,y,表示x和y之间有一条边 输出格式: 输出n行,第i行为sum[i] 说明 sum[1]=s(1,1)+s(1,2)+s(1,…
[Luogu2664]树上游戏(点分治) 题面 洛谷 题解 很好的一道点分治题. 首先直接点分治,考虑过每个分治重心的链的贡献. 我们从分治重心开始找每种颜色,强制令一种颜色只在其到分治重心的链上第一次出现的位置统计贡献,假设子树大小是\(size\),那么对于当前分治重心的其他所有子树都会产生\(size\)的贡献. 那么考虑当前分治重心每个子树的每个点会得到的贡献,首先把这棵子树内的贡献删去,然后记录其他所有颜色的贡献和.如果当前颜色在这棵子树内第一次出现,那么其他所有子树都必定会产生贡献,…
P2664 树上游戏 题目描述 \(\text{lrb}\)有一棵树,树的每个节点有个颜色.给一个长度为\(n\)的颜色序列,定义\(s(i,j)\) 为 \(i\) 到 \(j\) 的颜色数量.以及\(sum_i=\sum\limits_{j=1}^ns(i,j)\) 现在他想让你求出所有的\(sum_i\) 输入输出格式 输入格式: 第一行为一个整数\(n\),表示树节点的数量 第二行为\(n\)个整数,分别表示\(n\)个节点的颜色\(c[1],c[2],\dots,c[n]\) 接下来\…
P2664 树上游戏 https://www.luogu.org/problemnew/show/P2664 分析: 点分治. 首先关于答案的统计转化成计算每个颜色的贡献. 1.计算从根出发的路径的答案:如果某一个颜色是从根到这个点的链上的第一次出现的,那么这个颜色会对根产生siz[x]个贡献.(根连向它子树的任意一个点的路径都包含这个颜色). 2.计算子树内每个点过根的路径答案:记录一个数组sum[i],表示从根出发包含颜色i的路径的条数(在1中,找到一个第一次出现的颜色,加上这个点的siz即…
题目: P2664 树上游戏 分析: 本来是练习点分治的时候看到了这道题.无意中发现题解中有一种方法可以O(N)解决这道题,就去膜拜了一下. 这个方法是,假如对于某一种颜色,将所有这种颜色的点全部删去,原树会被割成若干棵小树,那么这个颜色对每个点的贡献就是:树的大小n - 所在小树的大小sz.所以我们要求出对于每个点来说,删去所有这个点颜色的点,这个点以下的小树size,这个用一个dfs和一个类似前缀和相减的过程,就可以求出. 接下来统计每个点的答案,就是所有颜色对这个点的贡献:n*颜色数-对于…
树上游戏 题目描述 lrb有一棵树,树的每个节点有个颜色.给一个长度为n的颜色序列,定义s(i,j) 为i 到j 的颜色数量.以及 $$sum_i=\sum_{j=1}^ns(i,j)$$ 现在他想让你求出所有的sum[i] 输入输出格式 输入格式: 第一行为一个整数n,表示树节点的数量 第二行为n个整数,分别表示n个节点的颜色c[1],c[2]--c[n] 接下来n-1行,每行为两个整数x,y,表示x和y之间有一条边 输出格式: 输出n行,第i行为sum[i] 输入输出样例 输入样例#1: 复…
Problem Description \(lrb\) 有一棵树,树的每个节点有个颜色.给一个长度为 \(n\) 的颜色序列,定义 \(s(i,j)\) 为 \(i\) 到 \(j\) 的颜色数量.以及 \[ sum[i]=\sum_{j=1}^n s(i,j) \] 现在他想让你求出所有的 \(sum[i]\) Input Format 第一行为一个整数 \(n\) ,表示树节点的数量 第二行为 \(n\) 个整数,分别表示 \(n\) 个节点的颜色 \(c[1],c[2]--c[n]\) 接…
传送门 题解 因为一个sb错误调了一个晚上……鬼晓得我为什么$solve(rt)$会写成$solve(v)$啊!!!一个$O(logn)$被我硬生生写成$O(n)$了竟然还能过$5$个点……话说还一直以为只有动态点分会很难没想到一般点分都这么可啪……%%%大佬 我们考虑一下,对于一棵树,我们要处理的是子树对根的答案的贡献,以及经过根的路径的贡献(也就是$LCA$为根的点对的答案). 对于树中的一个点$i$,如果$i$的颜色是在$i$到根的路径上第一次出现,那么所有与$i$的$LCA$为根的点,都…