题意:

思路:

num[a[u]]表示存在a[u]这个颜色且终点在u子树中的链长总和

ans[i]表示以当前的u为根,前面的子树对i的贡献之和

  1. var head,vet,next:array[..]of longint;
  2. size,f,ans,sun,num,a,flag,vis,b,c:array[..]of longint;
  3. n,m,sum,root,i,tot,now,x,y:longint;
  4.  
  5. procedure add(a,b:longint);
  6. begin
  7. inc(tot);
  8. next[tot]:=head[a];
  9. vet[tot]:=b;
  10. head[a]:=tot;
  11. end;
  12.  
  13. function max(x,y:longint):longint;
  14. begin
  15. if x>y then exit(x);
  16. exit(y);
  17. end;
  18.  
  19. procedure getroot(u,fa:longint);
  20. var e,v:longint;
  21. begin
  22. size[u]:=; f[u]:=;
  23. e:=head[u];
  24. while e<> do
  25. begin
  26. v:=vet[e];
  27. if (v<>fa)and(flag[v]=) then
  28. begin
  29. getroot(v,u);
  30. size[u]:=size[u]+size[v];
  31. f[u]:=max(f[u],size[v]);
  32. end;
  33. e:=next[e];
  34. end;
  35. f[u]:=max(f[u],sum-size[u]);
  36. if f[u]<f[root] then root:=u;
  37. end;
  38.  
  39. procedure getsize(u,fa:longint);
  40. var e,v:longint;
  41. begin
  42. size[u]:=;
  43. e:=head[u];
  44. while e<> do
  45. begin
  46. v:=vet[e];
  47. if (v<>fa)and(flag[v]=) then
  48. begin
  49. getsize(v,u);
  50. size[u]:=size[u]+size[v];
  51. end;
  52. e:=next[e];
  53. end;
  54. end;
  55.  
  56. procedure dfs(u,fa,k:longint);
  57. var e,v,tmp:longint;
  58. begin
  59. tmp:=;
  60. ans[u]:=ans[fa];
  61. if vis[a[u]]= then
  62. begin
  63. if k= then ans[u]:=ans[u]+sum-num[a[u]]
  64. else
  65. begin
  66. if num[a[u]]= then
  67. begin
  68. inc(m); b[m]:=a[u];
  69. end;
  70. num[a[u]]:=num[a[u]]+size[u];
  71. ans[now]:=ans[now]+size[u];
  72. end;
  73. vis[a[u]]:=; tmp:=;
  74. end;
  75. if k= then sun[u]:=sun[u]+ans[u];
  76. e:=head[u];
  77. while e<> do
  78. begin
  79. v:=vet[e];
  80. if (v<>fa)and(flag[v]=) then dfs(v,u,k);
  81. e:=next[e];
  82. end;
  83. if tmp= then vis[a[u]]:=;
  84. end;
  85.  
  86. procedure solve(u:longint);
  87. var e,v,i,n:longint;
  88. begin
  89. flag[u]:=;
  90. n:=;
  91. e:=head[u];
  92. while e<> do
  93. begin
  94. v:=vet[e];
  95. if flag[v]= then
  96. begin
  97. inc(n); c[n]:=v;
  98. end;
  99. e:=next[e];
  100. end;
  101. now:=u;
  102. m:=;
  103. vis[a[u]]:=; ans[u]:=;
  104. sum:=;
  105. for i:= to n do
  106. begin
  107. getsize(c[i],u);
  108. dfs(c[i],u,);
  109. dfs(c[i],u,);
  110. sum:=sum+size[c[i]];
  111. ans[u]:=ans[u]+size[c[i]];
  112. end;
  113. sun[u]:=sun[u]+ans[u];
  114. for i:= to m do num[b[i]]:=;
  115. m:=;
  116. vis[a[u]]:=; ans[u]:=;
  117. sum:=;
  118. for i:=n downto do
  119. begin
  120. dfs(c[i],u,);
  121. dfs(c[i],u,);
  122. sum:=sum+size[c[i]];
  123. ans[u]:=ans[u]+size[c[i]];
  124. end;
  125. for i:= to m do num[b[i]]:=;
  126. vis[a[u]]:=;
  127. e:=head[u];
  128. while e<> do
  129. begin
  130. v:=vet[e];
  131. if flag[v]= then
  132. begin
  133. root:=; sum:=size[v];
  134. getroot(v,);
  135. solve(root);
  136. end;
  137. e:=next[e];
  138. end;
  139. end;
  140.  
  141. begin
  142. assign(input,'mushroom10.in'); reset(input);
  143. assign(output,'mushroom10.out'); rewrite(output);
  144. readln(n);
  145. for i:= to n do read(a[i]);
  146. for i:= to n- do
  147. begin
  148. readln(x,y);
  149. add(x,y);
  150. add(y,x);
  151. end;
  152. f[]:=n; root:=; sum:=n;
  153. getroot(,);
  154. solve(root);
  155. for i:= to n do writeln(sun[i]);
  156. close(input);
  157. close(output);
  158. end.

【ZJOI2017 Round1练习】D8T1 mushroom(点分治)的更多相关文章

  1. 【ZJOI2017 Round1练习】

    喜闻乐见(爆蛋滚粗)的ZJOI模拟赛终于开始了 可以又一次感受被屠的快感 DAY1: T1:线段树打错-70 正解分块听卡常还要调块的大小 T2:数学弱爆 是道结论题 T3:暴力分滚粗 DAY2: T ...

  2. 【ZJOI2017 Round1后记】

    2017.4.1: NOIP+Round1综合成绩出来,标准分离续命线差了80分,果然还是联赛坑挖太大了…… 不管怎么说能续命的话还是要试一下的…… 发毒誓:Round2前不打手游,不看NGA,不看星 ...

  3. 【ZJOI2017 Round1练习&BZOJ4765】D1T3 普通计算姬(主席树,分块)

    题意: 思路:分块 使用树状数组维护sum[i]的前缀和 使用主席树维护root到u的路径上点的编号出现的个数 每次操作如果是修改就加入队列 如果是询问,考虑块内操作对询问的影响,每次在x点加上y会使 ...

  4. 【ZJOI2017 Round1练习】D2T2 iqtest(排列组合)

    题意: 思路: 根据欧拉定理,a^(phi(n)-1)为a mod n的逆元 ..]of longint; s,ans,x,mo,k,phi,tmp:int64; i,m,n,j:longint; f ...

  5. 【ZJOI2017 Round1练习】D2T1 river(二分图)

    题意: 思路:这道题并没有官方题解 没有羊驼在所有三元组中出现就是NO 现在考虑不少于1只的情况 删去其中一只,我们得到了两组点和一些边 我们只要判断这是否为一张二分图,使用暴力染色的方法就有60分了 ...

  6. 【ZJOI2017 Round1练习】D2T3 counter(线段树)

    题意: 思路: 预处理出b[i]代表i位置之前比a[i]小的数的个数 以每个数为结尾的组数是线段树中(1,a[i]-1) 对于a[i]换到最后,相当于线段树中(a[i]+1,n)-- 交换后b[i]又 ...

  7. 【ZJOI2017 Round1练习&BZOJ4767】D1T3 两双手(排列组合,DP)

    题意: 100%的数据:|Ax|,|Ay|,|Bx|,|By| <= 500, 0 <= n,Ex,Ey <= 500 思路:听说这是一道原题 只能往右或者下走一步且有禁止点的简化版 ...

  8. 【ZJOI2017 Round1练习&BZOJ4766】D1T2 文艺计算姬(Prufer编码)

    题意:给定一个一边点数为n,另一边点数为m,共有n*m条边的带标号完全二分图K_{n,m},求其生成树个数 mod p. 100%的数据:1 <= n,m,p <= 10^18 思路:这是 ...

  9. 【ZJOI2017 Round1练习】D4T2 trie(贪心,状压DP)

    题意:现在 Matej 手上有 N 个英文小写字母组成的单词, 他想知道,如果将这 N 个单词中的字母分别进行重新排列,形成的字母树的节点数最少是多少. n<=16,len[i]<=100 ...

随机推荐

  1. 【LeetCode】297. Serialize and Deserialize Binary Tree

    二叉树的序列化与反序列化. 如果使用string作为媒介来存储,传递序列化结果的话,会给反序列话带来很多不方便. 这里学会了使用 sstream 中的 输入流'istringstream' 和 输出流 ...

  2. webform 基础一

    WebForm是微软开发的一款产品,它将用户的请求和响应都封装为控件.让开发者认为自己是在操作一个windows界面.极大地提高了开发效率.区别于dreamweaver,可以用代码写,也可以把控件像w ...

  3. VS2012创建WebForm项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。

    解决方案: 使用VS2012开发,都要装NuGet插件(官网:http://nuget.org),进官网点安装就进入了微软的下载页面, 选择vs2012版本的NuGet.Tools.vsix文件,双击 ...

  4. IOS 中使用token机制来验证用户的安全性

    登录的业务逻辑{    http:是短连接.         服务器如何判断当前用户是否登录?    // 1. 如果是即时通信类:长连接.    // 如何保证服务器跟客户端保持长连接状态? // ...

  5. 使用Jenkins进行android项目的自动构建(3)

    建立Jenkins项目 1. “新增作业”->填写作业名称->选择“建置 Maven 2 或 3 專案”->OK.新增成功后会进入“組態設定”,暂时先保留默认值,稍后再进行设定. 2 ...

  6. 经典算法mark

    在平时找工作的时候,或多或少会遇到一些算法问题,很多都是比较经典或者网上已经流传很久的.只是我们没有接触过,所以不知道怎么解决. 在这儿,我自己总结一些我遇到的一些经典算法,给自己增加一点记忆,也给需 ...

  7. C++ 引用、指针

    一.引用 1.引用的作用:给变量起一个别名,是c++对c的扩充.原名和别名有相同的地址,根本上就是同一个东西,只是名字不一样.c++的引用机制主要是为了用作函数参数,增强函数传递数据的能力,比如swa ...

  8. 语音行业技术领先者Nuance上海诚招ASR/NLP研发工程师和软件工程师

    Nuance is a leading provider of voice and language solutions for businesses and consumers around the ...

  9. MySQL_将ubuntu18.04上的数据库导出并导入windows10下

    1.使用:mysqldump -uroot -p databasename>filename.sql databasename:要导出的数据库名. filename:指定导出sql文件的文件名. ...

  10. Locations for Public Frameworks

    Locations for Public Frameworks Third-party frameworks can go in a number of different file-system l ...