题目链接:http://codeforces.com/contest/351/problem/D

题目大意:n个数,col[i]对应第i个数的颜色,并给你他们之间的树形关系(以1为根),有m次询问,每次给出vi,ki,要求找出以点vi为根的子树上出现超过ki次的颜色数。

解题思路:这题显然是可以用莫队写的,只要在开一个数组cnk[i]记录出现次数超过i次的颜色数即可,但是要先进行“将树化为线段的操作”,之前写的一道线段树也用了dfs序的方法使得多叉树化为线段:链接,这里就不多说了。要注意的是使用dfs划线的过程中记得要把对应序号的颜色也映射到线段上。

 #include<iostream>
#include<algorithm>
#include<vector>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=1e5+;
int num;
int unit;
int arr[N],col[N],cnt[N],cnk[N],res[N],Start[N],End[N],vis[N];//cnk[i]表示至少出现i次的颜色数
vector<int>v[N]; struct node{
int l,r,kj;
int id;
}q[N]; //将树化为区间
void dfs(int rt){
Start[rt]=++num;
//**将对应序号的颜色映射到新的线段上
arr[num]=col[rt];
vis[rt]=;
for(int i=;i<v[rt].size();i++){
if(!vis[v[rt][i]])
dfs(v[rt][i]);
}
End[rt]=num;
} bool cmp(node a,node b){
return a.l/unit==b.l/unit?a.r<b.r:a.l/unit<b.l/unit;
} void add(int pos){
cnt[arr[pos]]++;
cnk[cnt[arr[pos]]]++;
} void remove(int pos){
cnk[cnt[arr[pos]]]--;
cnt[arr[pos]]--;
} int main(){
int n,m;
scanf("%d%d",&n,&m);
unit=sqrt(n);
for(int i=;i<=n;i++){
scanf("%d",&col[i]);
}
for(int i=;i<=n-;i++){
int a,b;
scanf("%d%d",&a,&b);
//**题目没有直接说明a,b从属关系所以建立双向邻接表
v[a].push_back(b);
v[b].push_back(a);
}
//以1为根
dfs(); for(int i=;i<=m;i++){
int vj,kj;
scanf("%d%d",&vj,&kj);
q[i].kj=kj;
q[i].id=i;
q[i].l=Start[vj];
q[i].r=End[vj];
}
sort(q+,q++m,cmp);
int L=q[].l,R=L-;
for(int i=;i<=m;i++){
while(L>q[i].l)
add(--L);
while(L<q[i].l)
remove(L++);
while(R<q[i].r)
add(++R);
while(R>q[i].r)
remove(R--);
res[q[i].id]=cnk[q[i].kj];
}
for(int i=;i<=m;i++){
printf("%d\n",res[i]);
}
}

最新文章

  1. redis、memcache、mongoDB 做了对比
  2. there is no spatial analyst license available or enabled
  3. android 禁止viewPager 滑动
  4. VA对于开发QT是神器
  5. windows服务控制类
  6. Hdu1001(1到100的和)
  7. mysql笔记7之数据类型
  8. javascript字典数据结构Dictionary实现
  9. Part 3:视图和模板--Django从入门到精通系列教程
  10. Opencv 330 如何進行圖像的旋轉?
  11. tomcat启动非常慢;连接oracle数据库失败,jdbc错误日志提示connection reset;测试主机间网络互通及数据库端口都正常
  12. windows10系统终极净化方法
  13. Flink-Kafka-Connector Flink结合Kafka实战
  14. 某jiub笔试
  15. C语言网蓝桥杯1116 IP判断
  16. Spring MVC Redis 整合笔记
  17. mac mamp环境 和linux下 安装redis 和可视化工具 Redis Desktop Manager
  18. 学习JS的心路历程-函式(一)
  19. 100-days: eight
  20. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E. Goods transportation 动态规划

热门文章

  1. Unity3D for VR 学习(4): 自绘摄像机的视口区域锥体
  2. BZOJ2005 能量汇集 【gcd求和】
  3. IPC$入侵大全
  4. 电子商务(电销)平台中商品模块(Product)数据库设计明细
  5. Hive(三)hive的高级操作
  6. 【bzoj3589】动态树
  7. winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已解] 望一起讨论)(技术改变世界-cnblog)
  8. eclipse中配置jbpm3.2插件
  9. Nginx报错 nginx: [error] open() &quot;/usr/local/nginx-1.6.3/logs/nginx.pid&quot; failed (2: No such file or directory)
  10. 2.UiSelector API 详细介绍