Codeforces 375D - Tree and Queries(dfs序+莫队)
2024-09-17 20:46:34
题目链接: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]);
}
}
最新文章
- redis、memcache、mongoDB 做了对比
- there is no spatial analyst license available or enabled
- android 禁止viewPager 滑动
- VA对于开发QT是神器
- windows服务控制类
- Hdu1001(1到100的和)
- mysql笔记7之数据类型
- javascript字典数据结构Dictionary实现
- Part 3:视图和模板--Django从入门到精通系列教程
- Opencv 330 如何進行圖像的旋轉?
- tomcat启动非常慢;连接oracle数据库失败,jdbc错误日志提示connection reset;测试主机间网络互通及数据库端口都正常
- windows10系统终极净化方法
- Flink-Kafka-Connector Flink结合Kafka实战
- 某jiub笔试
- C语言网蓝桥杯1116 IP判断
- Spring MVC Redis 整合笔记
- mac mamp环境 和linux下 安装redis 和可视化工具 Redis Desktop Manager
- 学习JS的心路历程-函式(一)
- 100-days: eight
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E. Goods transportation 动态规划
热门文章
- Unity3D for VR 学习(4): 自绘摄像机的视口区域锥体
- BZOJ2005 能量汇集 【gcd求和】
- IPC$入侵大全
- 电子商务(电销)平台中商品模块(Product)数据库设计明细
- Hive(三)hive的高级操作
- 【bzoj3589】动态树
- winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已解] 望一起讨论)(技术改变世界-cnblog)
- eclipse中配置jbpm3.2插件
- Nginx报错 nginx: [error] open() ";/usr/local/nginx-1.6.3/logs/nginx.pid"; failed (2: No such file or directory)
- 2.UiSelector API 详细介绍