博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5877 Weak Pair(树状数组+dfs+离散化)
阅读量:5063 次
发布时间:2019-06-12

本文共 1111 字,大约阅读时间需要 3 分钟。

题意:

给出一棵树,每个顶点都有权值,现在要你找出满足要求的点对(u,v)数,u是v的祖先并且a[u]*a[v]<=k。

 

思路:

转化一下,a[v]<=k/a[u],k/a[u]的最大值也就是k/a[v],也就是寻找<=k/a[v]的个数,到这儿,是不是很像树状数组?

我们只需要从根开始dfs,插入到树状数组中,并且查询即可。注意这道题目需要离散化一下。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 const int INF=0x3f3f3f3f; 8 typedef long long ll; 9 const int maxn=1e6+5;10 11 ll n,k,m;12 ll ans;13 ll a[maxn];14 ll b[maxn];15 ll c[maxn];16 int degree[maxn];17 18 vector
G[maxn];19 20 int lowbit(int x)21 {22 return x&-x;23 }24 25 int sum(int x)26 {27 int ret = 0;28 while(x>0)29 {30 ret+=c[x]; x-=lowbit(x);31 }32 return ret;33 }34 35 void add(int x, int d)36 {37 while(x<=m)38 {39 c[x]+=d;40 x+=lowbit(x);41 }42 }43 44 void dfs(int u, int fa)45 {46 int update_pos=lower_bound(b+1,b+m+1,a[u])-b;47 int query_pos;48 if(a[u]) query_pos=lower_bound(b+1,b+m+1,k/a[u])-b;49 else query_pos=m;50 ans+=sum(query_pos);51 add(update_pos,1);52 for(int i=0;i

 

转载于:https://www.cnblogs.com/zyb993963526/p/7469021.html

你可能感兴趣的文章
Nibbler – 免费的网站测试和指标评分工具
查看>>
转-使用EditPlus技巧,提高工作效率
查看>>
ACM/ICPC 之 电力网络-EK算法(POJ1459)
查看>>
wordpress 支持上传中文名称文件
查看>>
中国剩余定理---FZU 1402 猪的安家
查看>>
最近在线笔试的一些感想和总结,阿里巴巴,腾讯,百度,360。c++研发,机器学习等岗位...
查看>>
eclipse 中文版 变成 英文版 方法
查看>>
系统设计
查看>>
二维码扫描
查看>>
js页面滚动浮动层智能定位(MooTools)实例页面
查看>>
前端加密技术
查看>>
JS之表单验证
查看>>
Python操作MongoDB数据库
查看>>
VMware 锐捷 NAT模式的服务自动关闭的解决办法
查看>>
MFC 打开文件夹 调用其他程序 打开文件
查看>>
1058. A+B in Hogwarts (20)
查看>>
MySQL对索引的使用
查看>>
Centos 6.6 下搭建php5.2.17+Zend Optimizer3.3.9+Jexus环境
查看>>
javascript笔记—— Math.sin() 与 Math.cos() 用法 来自博客园 岁月星空
查看>>
【Android】在程序中使用触力反馈
查看>>