U41492 树上数颜色

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <vector>
#include <queue>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
typedef pair<LL,int>  PLI;
const int N = 1e5+5,mod=1e9+7;int h[N],ne[N<<1],e[N<<1],idx=0;
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;return ;}
int co[N],son[N],siz[N],cnt[N],ans[N],sum,flag;
// flag 是暴力统计的时候 重儿子也要遍历 但是根节点的重儿子不遍历 void dfs(int u,int fa)
{siz[u]++;for(int i=h[u];~i;i=ne[i]){if(e[i]==fa)continue;dfs(e[i],u);if(siz[e[i]]>siz[son[u]])son[u]=e[i];siz[u]+=siz[e[i]];}return ;
}void calc(int u,int fa,int val)
{if(val==1){if(!cnt[co[u]])sum++;cnt[co[u]]++;}else {cnt[co[u]]--;if(!cnt[co[u]])sum--;}for(int i=h[u];~i;i=ne[i])if(e[i]!=fa&&e[i]!=flag)calc(e[i],u,val);
}void dfs(int u,int fa,int keep)
{for(int i=h[u];~i;i=ne[i])if(e[i]!=fa&&e[i]!=son[u])dfs(e[i],u,0);if(son[u])dfs(son[u],u,1),flag=son[u];// 代表calc的时侯u节点的重儿子不遍历 calc(u,fa,1);  flag=0;     ans[u]=sum;if(!keep)calc(u,fa,-1),sum=0;
}int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++)h[i]=-1;for(int i=1,a,b;i<n;i++)scanf("%d%d",&a,&b),add(a,b),add(b,a);for(int i=1;i<=n;i++)scanf("%d",co+i);dfs(1,0);dfs(1,0,1);for(int i=1;i<=n;i++)cout<<ans[i]<<endl;return 0;
}

CF600E Lomsat gelral

代码

CF570D Tree Requests

代码

CF208E Blood Cousins

代码

P4149 [IOI2011]Race

代码

P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并

代码

U95602 射手座之日

代码

树上启发式合并 简单例题相关推荐

  1. [dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)

    文章目录 前言 树上启发式合并 引入 算法思想 时间复杂度 模板 练习 例题:CF600E Lomsat gelral solution code CF208E Blood Cousins solut ...

  2. 与图论的邂逅09:树上启发式合并

    启发式树上合并 先看这样一个例题: 给定一个长度为\(10^5\)的序列,序列中都是\([0,1000000]\)的整数,接下来有\(10^5\)次询问,共两种询问:修改序列某个位置的值,以及查询区间 ...

  3. 树上启动式合并问题 ---- D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths [状态压缩+树上启发式合并]

    题目链接 题目大意: 一棵根为1 的树,每条边上有一个字符(a−va−va−v共22种). 一条简单路径被称为Dokhtar−kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串. 求每个子树 ...

  4. 【学习笔记】树上启发式合并

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 树上启发式合并 模板 复杂度分析 例题 **Problem A. Arpa's letter-m ...

  5. CodeForces - 208E Blood Cousins(树上倍增+二分/树上启发式合并)

    题目链接:点击查看 题目大意:给出n棵树,再给出m个询问,每次询问给出两个整数u和k,先假设u在k层之上的祖先是p,问与u在同一层深度,并且公共祖先都是p的节点有多少个 题目分析:因为先要求出u在第k ...

  6. CF741D-Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths【树上启发式合并】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=CF741D 题目大意 一棵根为111的树,每条边上有一个字符(a−v( ...

  7. 树上启发式合并(dsu on tree)

    dsu on tree dsu \text{dsu} dsu一般指 disjoint set union \text{disjoint set union} disjoint set union,即并 ...

  8. 树上启发式合并问题 ---- 2019icpc南昌 K. Tree (树上启发式合并 + 动态开点线段树)

    题目链接 题目大意: 就是给你一颗树,每个点有个权值viv_ivi​,问你有多少对(x,y)(x,y)(x,y)满足: xxx不是yyy的祖先 yyy也不是xxx的祖先 xxx和yyy的距离不超过kk ...

  9. 树上启发式合并问题 ---- D. Tree and Queries[树上启发式合并+树状数组]

    题目链接 题目大意: 就是给你一棵树,树上每个节点都有一个颜色,在你mmm次询问每次询问给你一个节点uuu和一个数字kkk,问你在uuu这颗子树里面又少种颜色的结点个数是大于kkk; 解题思路: 看到 ...

最新文章

  1. linux 伪终端 pty 简介
  2. word树状分支图_交互设计技能 | 抛弃Word,试试用Excel和Xmind来整理思路吧
  3. Windows下Qt5搭建Android开发环境笔记
  4. 1002 写出这个数 (20分)
  5. 开源软件使用_消费开源软件:如何使用和购买
  6. Verilog HDL 学习笔记3-Latch
  7. 【免费毕设】成绩查询系统(系统+论文+答辩PPT)
  8. 梦笔记20211017
  9. CAD绘图必备小插件 :想要快速提高工作效率也很简单!
  10. 职场“奇葩说”:我的老板有多坑?
  11. Python学习笔记-2017.5.4thon学习笔记-2017.5.19
  12. 信息系统开发与管理第一遍总结
  13. 基于FFMPEG水印添加---avfilter库
  14. CTFshow_萌新(密码)
  15. Vue项目自定义滚动条样式【火狐、谷歌、360】
  16. 2020年的数据工程
  17. 程序员干到30岁,真的只能转行了么?
  18. 为什么寄存器比RAM快
  19. 蓄电池与超级电容混合储能并网matlab simulink仿真模型
  20. react 谷歌地图_谷歌地图与React

热门文章

  1. 如何有效利用碎片时间?这里有个办法
  2. 每日一笑 | 男朋友整天沉迷游戏怎么办...?
  3. 程序员编程10大原则,请牢牢记住!
  4. 《SAS编程与数据挖掘商业案例》学习笔记之一
  5. 放大器非线性失真研究装置_高效布里渊光纤放大器
  6. ssh长时间不操作便断开_连接SSH长时间不操作断开解决办法
  7. node 16位 转24位_同时将24位和32位BMP图像顺时针旋转90度
  8. 用gradle启动java项目_构建Java项目
  9. css伪类元素加在元素前,CSS伪类:before在元素之前 :after 在元素之后实例讲解
  10. linux java升级版本_为嵌入式Linux设备实现更新/升级系统