HDU 5877 Weak Pair(树状数组+dfs+离散化)
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 ;
}
HDU 5877 Weak Pair(树状数组+dfs+离散化)的更多相关文章
- HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
		
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Tota ...
 - HDU 3333 | Codeforces 703D 树状数组、离散化
		
HDU 3333:http://acm.hdu.edu.cn/showproblem.php?pid=3333 这两个题是类似的,都是离线处理查询,对每次查询的区间的右端点进行排序.这里我们需要离散化 ...
 - 树形DP+树状数组 HDU 5877  Weak Pair
		
//树形DP+树状数组 HDU 5877 Weak Pair // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 // 这道题要离散化 #i ...
 - HDU 5877 Weak Pair(弱点对)
		
HDU 5877 Weak Pair(弱点对) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Jav ...
 - 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序
		
[题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...
 - WUSTOJ 1337: Car race game(C)树状数组,离散化
		
题目链接:1337: Car race game 参考资料:⑴ Car race game 树状数组 棋煜,⑵ 树状数组,⑶ 离散化 补充资料:⑴ qsort,⑵ 二分查找 Description B ...
 - HDU - 5877 Weak Pair (dfs+树状数组)
		
题目链接:Weak Pair 题意: 给出一颗有根树,如果有一对u,v,如果满足u是v的父节点且vec[u]×vec[v]<=k,则称这对结点是虚弱的,问这棵树中有几对虚弱的结点. 题解: 刚开 ...
 - hdu 5877 Weak Pair dfs序+树状数组+离散化
		
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Prob ...
 - HDU 5877  Weak Pair  DFS + 树状数组 + 其实不用离散化
		
http://acm.hdu.edu.cn/listproblem.php?vol=49 给定一颗树,然后对于每一个节点,找到它的任何一个祖先u,如果num[u] * num[v] <= k.则 ...
 
随机推荐
- [运维-安全]CentOS7.0环境下安装kangle和easypanel
			
一.康乐简介 主要特点1.免费开源kangle技术团队希望国人拥有一款真正好用.易用.实用的国产web服务器.2.跨平台可在linux.windows.freebsd.openbsd.netbsd.s ...
 - [py][mx]django注册-邮件激活
			
人生,学习,就是一段旅途, 说是放弃,其实是自信心作祟. 因为不同时间段状态,譬如晚上和早上刚来状态不一样.做相同事情容器失去自信而放弃. 坚持可以打破这个魔咒 还有就是有些问题得分割, 不要让压死牛 ...
 - Python随机数生成方法
			
假设你对在Python生成随机数与random模块中最经常使用的几个函数的关系与不懂之处.以下的文章就是对Python生成随机数与random模块中最经常使用的几个函数的关系,希望你会有所收获,以下就 ...
 - mysql 开启慢查询
			
linux启用MySQL慢查询 vim /etc/my.cnf [mysqld] slow-query-log = on slow_query_log_file = /var/log/slow_que ...
 - 几乎考虑到了每个细节的php图片上传
			
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...
 - liferay常用api总结
			
liferay之笑傲江湖学习笔记<一> 我们大家都知道,想要在一项技术上过硬,你需要付出汗水的,需要闭门修炼,每一个成功的人,都是那种耐得住寂寞的人,好了闲话少说.开始学习之旅 在life ...
 - Perl的子程序(二)
			
在Perl中可以自己创建子程序(Subroutine): 关键字sub,子程序名以及用花括号封闭起来的代码块. sub marine { ... } 子程序名与标量的命名空间是不同的两个部分. 子程 ...
 - Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2) D. Something with XOR Queries
			
地址:http://codeforces.com/contest/872/problem/D 题目: D. Something with XOR Queries time limit per test ...
 - MySQL从删库到跑路_高级(三)——视图
			
作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.视图简介 1.视图简介 视图是由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式.视图包含 ...
 - vue 渲染页面的时候 出现闪烁问题的解决办法
			
在使用vue绑定数据的时候,渲染页面时会出现变量闪烁 <div id="h_cameraman" v-cloak> <public-nav> {{ msg ...