https://www.luogu.org/problemnew/show/P2664

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<vector>
  5. using namespace std;
  6. #define fi first
  7. #define se second
  8. #define mp make_pair
  9. #define pb push_back
  10. typedef long long ll;
  11. typedef unsigned long long ull;
  12. typedef pair<int,int> pii;
  13. struct E
  14. {
  15. int to,nxt;
  16. }e[];
  17. int f1[],ne;
  18. int sz[],a[];
  19. int n;
  20. ll t1[],t2[],s,ans[];
  21. void dfs1(int u,int fa)
  22. {
  23. sz[u]=;
  24. int v;
  25. ll t=t1[a[u]],z=t1[a[fa]];
  26. for(int k=f1[u];k;k=e[k].nxt)
  27. if(e[k].to!=fa)
  28. {
  29. v=e[k].to;
  30. dfs1(v,u);
  31. sz[u]+=sz[v];
  32. }
  33. t1[a[u]]=t+sz[u];
  34. t2[u]=t1[a[fa]]-z;
  35. }
  36. void dfs2(int u,int fa)
  37. {
  38. int v;ll ta;
  39. ans[u]=s;
  40. for(int k=f1[u];k;k=e[k].nxt)
  41. if(e[k].to!=fa)
  42. {
  43. v=e[k].to;
  44. ta=t1[a[v]];
  45. s+=n-t1[a[v]];
  46. t1[a[v]]=n;
  47. s+=t2[v]-sz[v];
  48. t1[a[u]]+=t2[v]-sz[v];
  49. dfs2(v,u);
  50. s+=ta-t1[a[v]];
  51. t1[a[v]]=ta;
  52. s-=t2[v]-sz[v];
  53. t1[a[u]]-=t2[v]-sz[v];
  54. }
  55. }
  56. int main()
  57. {
  58. int i,x,y;
  59. scanf("%d",&n);
  60. for(i=;i<=n;++i)
  61. scanf("%d",a+i);
  62. for(i=;i<n;++i)
  63. {
  64. scanf("%d%d",&x,&y);
  65. e[++ne].to=y;e[ne].nxt=f1[x];f1[x]=ne;
  66. e[++ne].to=x;e[ne].nxt=f1[y];f1[y]=ne;
  67. }
  68. dfs1(,);
  69. for(i=;i<=;++i)
  70. s+=t1[i];
  71. dfs2(,);
  72. for(i=;i<=n;++i)
  73. printf("%lld\n",ans[i]);
  74. return ;
  75. }

洛谷P2664 树上游戏的更多相关文章

  1. 洛谷 P2664 树上游戏 解题报告

    P2664 树上游戏 题目描述 \(\text{lrb}\)有一棵树,树的每个节点有个颜色.给一个长度为\(n\)的颜色序列,定义\(s(i,j)\) 为 \(i\) 到 \(j\) 的颜色数量.以及 ...

  2. ●洛谷P2664 树上游戏

    题链: https://www.luogu.org/problemnew/show/P2664题解: 扫描线,线段树维护区间覆盖 https://www.luogu.org/blog/ZJ75211/ ...

  3. 洛谷P2664 树上游戏(点分治)

    传送门 题解 因为一个sb错误调了一个晚上……鬼晓得我为什么$solve(rt)$会写成$solve(v)$啊!!!一个$O(logn)$被我硬生生写成$O(n)$了竟然还能过$5$个点……话说还一直 ...

  4. 洛谷P2664 树上游戏(点分治)

    题意 题目链接 Sol 神仙题..Orz yyb 考虑点分治,那么每次我们只需要统计以当前点为\(LCA\)的点对之间的贡献以及\(LCA\)到所有点的贡献. 一个很神仙的思路是,对于任意两个点对的路 ...

  5. 【刷题】洛谷 P2664 树上游戏

    题目描述 lrb有一棵树,树的每个节点有个颜色.给一个长度为n的颜色序列,定义s(i,j) 为i 到j 的颜色数量.以及 \[sum_i=\sum_{j=1}^ns(i,j)\] 现在他想让你求出所有 ...

  6. 洛谷P2664 树上游戏 【点分治 + 差分】

    题目 lrb有一棵树,树的每个节点有个颜色.给一个长度为n的颜色序列,定义s(i,j) 为i 到j 的颜色数量.以及 现在他想让你求出所有的sum[i] 输入格式 第一行为一个整数n,表示树节点的数量 ...

  7. 洛谷P2664 树上游戏——点分治

    原题链接 被点分治虐的心态爆炸了 题解 发现直接统计路径上的颜色数量很难,考虑转化一下统计方式.对于某一种颜色\(c\),它对一个点的贡献为从这个点出发且包含这种颜色的路径条数. 于是我们先点分一下, ...

  8. [洛谷U40581]树上统计treecnt

    [洛谷U40581]树上统计treecnt 题目大意: 给定一棵\(n(n\le10^5)\)个点的树. 定义\(Tree[l,r]\)表示为了使得\(l\sim r\)号点两两连通,最少需要选择的边 ...

  9. P2664 树上游戏

    P2664 树上游戏 https://www.luogu.org/problemnew/show/P2664 分析: 点分治. 首先关于答案的统计转化成计算每个颜色的贡献. 1.计算从根出发的路径的答 ...

随机推荐

  1. JS 删除数组中指定的某个元素的方法

    //首先创建函数方法 Array.prototype.indexOf = function(val){ for(var i=0;i<this.length;i++){ if(this[i] == ...

  2. Java IO(输入输出)

    1. System.out.System.in System 内部: public final static InputStream in = null; public final static Pr ...

  3. PHP 流程控制

    流程控制 if, else, elseif $a = 5; $b = 9; if ($a > $b): echo "a is bigger than b"; elseif ( ...

  4. jQuery bootstrap框架下重置下拉框选择

    前端页面中下拉选择框采用bootstrap-select美化,如下图:

  5. python+selenium自动化测试环境搭建

    selenium 是一个web的自动化测试工具,不少学习功能自动化的同学开始首选selenium ,相因为它相比QTP有诸多有点: *  免费,也不用再为破解QTP而大伤脑筋 *  小巧,对于不同的语 ...

  6. 红黑树的C语言实现

    rbtree.h #ifndef _RED_BLACK_TREE_H_ #define _RED_BLACK_TREE_H_ #define RED 0 // 红色节点 #define BLACK 1 ...

  7. dubbo的防痴呆设计

    项目中也经常会遇到各种因为配置而引入的问题,很多技术支持解决不掉就找开发,结果发现大部分还是配置错误或网络不通等.如果在设计之初就能考虑到并针对这些问题做出应对设计,甚至给出异常的解决方案,确实可以减 ...

  8. [RTOS]--uCOS、FreeRTOS、RTThread、RTX等RTOS的对比之特点

    本篇博客就来细数这几个RTOS的特点.   以下内容均来自官方网站或者官方手册Feature的Google翻译的加了我的一些调整,没有任何主观成分. 1. FreeRTOS   FreeRTOS是专为 ...

  9. POJ1860(ford判环)

    Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 24243   Accepted: 881 ...

  10. ng2父子模块数据交互

    一.父模块向子模块传值 //父html <my-child [childdata]="parentdata"></my-child> 其中,my-child ...