E. Distinctive Roots in a Tree

树上差分

  • 如果当前节点u的某一棵子树中的某个节点的值和当前节点相同,那么除了当前节点这一棵子树节点,其他节点(其他子树以及u上面的节点)一定不满足要求。

  • 如果当前节点子树之外的节点(u上面的节点)与当前节点值相同,那么当前子树节点不满足要求。

如何知道当前子树中的节点是否与当前节点相同?
dfs过程中记录进入该子树之前某值的个数与出子树后该值的个数进行比较,如果比之前多,说明子树中存在该值。

如何知道当前节点所有子树之外的节点是否存在与当前值相同的节点?
如果不存在,说明当前节点所有子树出现该值个数和应该与总个数相同

对于不能作为答案的节点标记一下即可,由于只有子树操作考虑dfs序,区间修改单点查询差分即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010,mod=1e9+7;
int h[N],e[2*N],ne[2*N],idx;
int a[N],cnt[N],num[N],s[N],n;
map<int,int> mp;
int find(int x)
{if(!mp.count(x)) mp[x]=++idx;return mp[x];
}
void add(int a,int b)
{e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void update(int l,int r,int x)
{s[l]+=x,s[r+1]-=x;
}
int dfn[N],timestamp,sz[N];
void dfs(int u,int fa)
{dfn[u]=++timestamp;sz[u]=1;int now=cnt[a[u]];// 差分统计u子树出现a[u]的次数cnt[a[u]]++;for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(j==fa) continue;int pre=cnt[a[u]];//进入子树前dfs(j,u);sz[u]+=sz[j];if(cnt[a[u]]>pre) //说明j子树出现了a[u]update(1,n,1),update(dfn[j],dfn[j]+sz[j]-1,-1);}if(cnt[a[u]]-now!=num[a[u]])//差分统计u子树出现a[u]的次数 不等于总个数update(dfn[u],dfn[u]+sz[u]-1,1);//1表示不能作为答案}
int main()
{IO;int T=1;//cin>>T;while(T--){memset(h,-1,sizeof h);cin>>n;for(int i=1;i<=n;i++) {cin>>a[i];a[i]=find(a[i]);num[a[i]]++;//总个数}idx=0;for(int i=1;i<n;i++){int a,b;cin>>a>>b;add(a,b),add(b,a);}dfs(1,-1);int res=0;for(int i=1;i<=n;i++){s[i]+=s[i-1];if(!s[i]) res++;}cout<<res<<'\n';}return 0;
}

要加油哦~

codeforces1467 E. Distinctive Roots in a Tree(树上差分)相关推荐

  1. Distance on the tree(树上倍增+主席树+树上差分+lca)南昌网络赛

    题目链接:南昌邀请赛网络赛Distance on the tree 统计一条链上边权小于k的边数. 树上差分,对于边权来说,一条链上的边的条数=sum[x]+sum[y]-2*sum[lca(x,y) ...

  2. BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )

    树链剖分+可持久化线段树....这个一眼可以看出来, 因为可持久化所以写了标记永久化(否则就是区间修改的线段树的持久化..不会), 结果就写挂了, T得飞起...和管理员拿数据调后才发现= = 做法: ...

  3. 差分数组 and 树上差分

    差分数组 定义 百度百科中的差分定义 //其实这完全和要讲的没关系 qwq 进去看了之后是不是觉得看不懂? 那我简单概括一下qwq 差分数组de定义:记录当前位置的数与上一位置的数的差值. 栗子 容易 ...

  4. BZOJ4771 七彩树(dfs序+树上差分+主席树)

    考虑没有深度限制怎么做.显然的做法是直接转成dfs序上主席树,但如果拓展到二维变成矩形数颜色数肯定没法做到一个log. 另一种做法是利用树上差分.对于同种颜色的点,在每个点处+1,dfs序相邻点的lc ...

  5. 洛谷 - P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并(树上差分+线段树合并)

    题目链接:点击查看 题目大意:给出一棵树,再给出 m 次操作,每次操作会选择两个点 ( x , y ) ,使得这条路径上的所有点的种类 z 加一,最后问每个点的哪个种类出现的频率最高,若多个种类出现频 ...

  6. 【HDU - 5452】Minimum Cut(树形dp 或 最近公共祖先lca+树上差分,转化tricks,思维)

    题干: Given a simple unweighted graph GG (an undirected graph containing no loops nor multiple edges) ...

  7. [luogu P3128][USACO15DEC]Max Flow [LCA][树上差分]

    题目描述 Farmer John has installed a new system of  pipes to transport milk between the  stalls in his b ...

  8. 【LOJ#2236】【洛谷P3258】松鼠的新家【LCA】【树上差分】

    题目大意: 题目链接: 洛谷:https://www.luogu.org/problem/P3258 LOJ:https://loj.ac/problem/2236 给出一棵树以及 n n n个点走的 ...

  9. 解题报告:AcWing 352. 闇の連鎖(树上差分、方案统计)

    https://www.acwing.com/problem/content/354/ 在没有附加边的情况下,我们发现这是一颗树,那么再添加条附加边(x,y)后,会造成(x,y)之间产生一个环 如果我 ...

最新文章

  1. 同一个网站下不同应用程序可以不同Framework版本
  2. 写代码前的准备,你做好了吗?
  3. 【codevs1026】逃跑的拉尔夫,广搜的胜利
  4. 微信小程序横版日历,tab栏
  5. python简单的聚类分析代码_python kmeans聚类简单介绍和实现代码
  6. 蓝牙 AVRCP 剖析
  7. MP4Box常用命令
  8. vue轻量级后台管理系统基础模板
  9. 【日常计算机问题】win11、win10解决公共WiFi认证不弹出的问题。电脑没有弹出认证界面。以广州图书馆i-guangdong;i广东为例
  10. 优维EasyOps®全平台又一波新功能上线,操作体验更带劲
  11. 这个macOS神器,让爱怀旧的人直呼:“爷青回!”
  12. 超微服务端重装系统简要记录
  13. 单链表操作之合并两个单链表
  14. HTML实现简单的点击播放和暂停音乐
  15. 基于Java socket的网络聊天室的设计与实现
  16. 浅谈df和du的区别
  17. Matlab 画地图时搞定经纬度注释 函数
  18. jaas权限认证的剖析
  19. “RSoft光电器件设计仿真技术与应用”专题培训通知
  20. Windows10系统VScode连接腾讯云Linux服务器

热门文章

  1. php 图片 3d旋转图片,html5实现图片的3D旋转效果
  2. 怎么从转移特性曲线上看dibl_「科普向」这篇让你快速搞懂IGBT的静态特性
  3. mysql新加不了数据库_MySQL数据库之mysql增加新用户无法登陆解决方法
  4. 7-48 银行排队问题之单窗口“夹塞”版 (30 分)(思路和详解+map做法)来呀Baby!
  5. java jlist 图标_java – 将图像添加到JList项目
  6. [Java基础]IO流概述和分类
  7. [USACO1.5]八皇后 Checker Challenge
  8. 蓝桥杯2015初赛-奇妙的数字
  9. 唯品会php接口,唯品会链接生成联盟链接 - 唯品会API免费API接口-唯品会API开放API接口-云商数据(www.ecapi.cn)...
  10. git上托管的代码如何部署在阿里云上_居然仅用浏览器搞定Spring Boot应用的开发与部署...