http://acm.hdu.edu.cn/showproblem.php?pid=5877

题意:

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

思路:

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

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

 #include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
typedef long long ll;
const int maxn=1e6+; ll n,k,m;
ll ans;
ll a[maxn];
ll b[maxn];
ll c[maxn];
int degree[maxn]; vector<int> G[maxn]; int lowbit(int x)
{
return x&-x;
} int sum(int x)
{
int ret = ;
while(x>)
{
ret+=c[x]; x-=lowbit(x);
}
return ret;
} void add(int x, int d)
{
while(x<=m)
{
c[x]+=d;
x+=lowbit(x);
}
} void dfs(int u, int fa)
{
int update_pos=lower_bound(b+,b+m+,a[u])-b;
int query_pos;
if(a[u]) query_pos=lower_bound(b+,b+m+,k/a[u])-b;
else query_pos=m;
ans+=sum(query_pos);
add(update_pos,);
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
if(v==fa) continue;
dfs(v,u);
}
add(update_pos,-);
} int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
memset(c,,sizeof(c));
memset(degree,,sizeof(degree));
scanf("%lld%lld",&n,&k);
for(int i=;i<=n;i++) {G[i].clear();scanf("%lld",&a[i]);b[i]=a[i];} m=n;
for(int i=;i<=n;i++)
{
if(a[i]) b[++m]=k/a[i];
} sort(b+,b+m+);
m=unique(b+,b+m+)-(b+); for(int i=;i<=n-;i++)
{
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
degree[v]++;
} ans=;
for(int i=;i<=n;i++)
if(degree[i]==) dfs(i,-);
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. 基于OpenCV 的iOS开发
  2. 使用微软CORS包不能跨域访问的问题
  3. mongodb学习4---索引
  4. Java基本概念(未完)
  5. PHP之preg_replace()与ereg_replace()正则匹配比较讲解
  6. springmvc整合redis架构搭建实例
  7. DS4700存储日志收集
  8. Git merge local repository
  9. JQuery UI 封装了一些常用模板
  10. 【DG】[三思笔记]一步一步学DataGuard
  11. IE浏览器兼容
  12. worknote
  13. 5.2Python数据处理篇之Sympy系列(二)---Sympy的基本操作
  14. 开发一个简单的chrome插件-解析本地markdown文件
  15. 疑难杂症:Java中Scanner连续获取int和String型发生错误.
  16. Tomcat映射虚拟路径到指定磁盘(eclipse)
  17. CF451E
  18. C#检测本机是否联网
  19. 数据分析之Matplotlib
  20. Codeforces 817

热门文章

  1. PAT 1019 General Palindromic Number[简单]
  2. JavaScrip总体
  3. Android中Activity的四种开发模式
  4. CentOS系统下的数据盘挂载
  5. Set keys=Map.keyset()
  6. VUE滚动条插件——vue-happy-scroll
  7. 摘要JSR168 PORLET标准手册汉化整理
  8. 无法在web服务器下启动调试
  9. 并发写Btree原理剖析
  10. python excel操作 练习-#操作单列 #操作A到C列 #操作1到3行 #指定一个范围遍历所有行和列 #获取所有行 #获取所有列