题目链接:点击查看

题目大意:给定一个n个节点的树,每个节点都有权值,现在定义weak pair(u,v)需要满足的两个条件:

  1. u是v的祖先;
  2. ;

问给定的树中有多少个weak pair;

题目分析:我们可以将问题转化一下,要求,可以两边同除,得到,即用dfs序从根节点跑一边树,记录截止到任意子节点为止,之前有多少个小于等于的父节点即可,用树状数组或线段树维护数量就行,这里偷个懒用树状数组维护的。上代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<cmath>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=2e5+100;//记得将边界扩大为2倍int n;LL k;LL c[N];LL a[N];int in[N];//维护入度vector<LL>v;//离散化用vector<int>node[N];//邻接表int lowbit(int x)
{return x&(-x);
}void update(int pos,int val)
{while(pos<=2*n)//一定要注意,因为在离散化的过程中加入了k/a[u]这一个值,所以最后的上限扩大为了2*n{c[pos]+=val;pos+=lowbit(pos);}
}LL query(int pos)
{LL ans=0;while(pos){ans+=c[pos];pos-=lowbit(pos);}return ans;
}LL ans;void dfs(int u)
{//这里二分注意一下,需要让顶点右移一个单位,因为树状数组只能处理正整数int q=lower_bound(v.begin(),v.end(),a[u])-v.begin()+1;//记录a[u]的编号int p=lower_bound(v.begin(),v.end(),k/a[u])-v.begin()+1;//记录k/a[u]的编号ans+=query(p);//查找该子节点先前有多少个父节点在区间[1,k/a[u]]中update(q,1);//将该节点加入for(int i=0;i<node[u].size();i++)dfs(node[u][i]);update(q,-1);//访问完该节点的子树后记得将该节点移除
}int main()
{
//  freopen("input.txt","r",stdin)int w;cin>>w;while(w--){v.clear();memset(c,0,sizeof(c));memset(in,0,sizeof(in));scanf("%d%lld",&n,&k);for(int i=1;i<=n;i++){node[i].clear();scanf("%lld",a+i);v.push_back(a[i]);v.push_back(k/a[i]);}for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);node[u].push_back(v);in[v]++;}int root;for(int i=1;i<=n;i++)if(!in[i]){root=i;break;}sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());ans=0;dfs(root);printf("%lld\n",ans);}/*由于题目给的样例数据太水,这里从别人那里找来一组数据:input:39 102 4 7 9 2 11 7 4 11 21 32 42 53 63 73 86 99 102 4 7 9 2 11 7 4 11 21 32 42 53 63 73 86 98 102 4 7 9 2 11 7 41 21 32 42 53 63 73 8output:664*/return 0;
}

HDU - 5877 Weak Pair(离散化+树状数组+dfs序)相关推荐

  1. hdu 6447YJJ's Salesman 离散化+树状数组+DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 因为图中点的坐标值过大,达到1e9.然而只有1e5个点.所以先将其离散化.并按照<x.y& ...

  2. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2545  Solved: 1419 [Submit][S ...

  3. [BZOJ 2434][Noi2011]阿狸的打字机(AC自动机+树状数组+dfs序)

    Description 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿狸研究发现,这个打字机是这样工作的: ·输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母 ...

  4. 【BZOJ3653】谈笑风生 离线+树状数组+DFS序

    [BZOJ3653]谈笑风生 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称"a比b不知道高明到哪里去了&quo ...

  5. Apple Tree(树状数组+dfs序+邻接表数组(链式前向星) )

    链接:http://poj.org/problem?id=3321 Description There is an apple tree outside of kaka's house. Every ...

  6. hdu 6203 ping ping ping(贪心+树状数组+dfs序)

    题目链接:hdu 6203 ping ping ping 题意: 给你一棵n+1个节点树,现在有q条路径不通,问你最少有多少个节点坏掉了. 题解: 考虑贪心,对这q条路径求一下lca,按照lca的深度 ...

  7. 树形DP+树状数组 HDU 5877 Weak Pair

    1 //树形DP+树状数组 HDU 5877 Weak Pair 2 // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 3 // 这道题要 ...

  8. HDOJ/HDU 1556 Color the ball(树状数组)

    Problem Description N个气球排成一排,从左到右依次编号为1,2,3-.N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从 ...

  9. nyoj 1261 音痴又音痴的LT(离散化+树状数组求K小数)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1261 解题思路:比较水的题,用离散化+树状数组求K小数即可,先用一次离线处理. #inc ...

最新文章

  1. ue4 rpc php,UE4 RPC在C++中的使用简例
  2. Nginx 负载均衡 - linux下nginx加载配置文件异常处理,提示invalid PID number in “/run/nginx.pid“问题解决
  3. Combinations
  4. Java语言基础JavaScript
  5. python subprocess使用记录
  6. Linux服务集群部署实战--MySQL、Redis、ES、RocketMQ、Zookeeper
  7. 【Redis】13.Redis服务器配置redis.conf
  8. 有道云笔记导入到CSDN博客
  9. 带宽和最高速率之间的换算
  10. vmware linux虚拟机网络配置
  11. java ssh框架 运行_SSH框架的简单示例(执行流程)
  12. nginx “504 Gateway Time-out”错误
  13. 多元逻辑回归(Multinomial Logistic Regression)
  14. shell脚本编程笔记(十)—— 正则表达式
  15. 2022年索尼A7R4A与A7R3A如何选择?
  16. 小驼峰命名规则是什么?
  17. sourceinsight tab 空格 对齐 等宽字体
  18. 计组 | 周期大杂烩 —— 指令周期、时钟周期(节拍周期)、机器周期(CPU周期)等
  19. 2020年中国云计算市场需求及云厂商投资情况分析[图]
  20. RuntimeError: cuda runtime error (30) : unknown error at /pytorch/aten/src/THC/THCGeneral.cpp:50

热门文章

  1. explain 之key rows extra
  2. RabbitMQ实现工作队列
  3. 常见问题_数组索引越界异常
  4. 多继承-概念、语法和基本演练
  5. 函数的参数-在函数内部针对参数赋值不会影响外部实参
  6. 设计模式:适配器模式(Adapter)
  7. java 归并排序 非递归_归并排序-递归及非递归的JAVA实现
  8. 【报错笔记】在eclipse中做Spring项目时,创建Spring容器时老是出错
  9. web开发的跨域问题详解
  10. .NET Core 项目指定SDK版本