hdu 5877 (dfs+树状数组) Weak Pair
题目:这里
题意:
给出一个n个结点的树和一个数k,每个结点都有一个权值,问有多少对点(u,v)满足u是v的祖先结点且二者的权值之积小于等于k、
从根结点开始dfs,假设搜的的点的权值是v,我们需要的是在此之前搜的点中小于等于k/v的数的个数,于是用树状数组查询,查完后将v加入树状数组以供下个
点查询,回溯的时候再一个个的删除将其树状数组。由于这个权值和k的范围比较大,所以得先离散化后在加入树状数组。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std; typedef long long ll;
const int M = 1e5 + ;
int head[M],cas,du[M],has[M],len;
ll a[M],b[M],k,sum;
bool vis[M]; int max(int x,int y){return x>y?x:y;}
struct Edge{
int to,next;
}edge[M*]; void add(int u,int v)
{
edge[++cas].next=head[u];
edge[cas].to=v;
head[u]=cas;
} int lowbit(int x) {return x&(-x);} void shuadd(int x,int y)
{
while (x<=len){
has[x]+=y;
x+=lowbit(x);
}
} int getsum(int x){
int ans=;
while (x>){
ans+=has[x];
x-=lowbit(x);
}
return ans;
} int sreach(ll x)
{
int l=,r=len,ans=;
while (l<=r){
int mid=(l+r)/;
if (b[mid]<=x) ans=max(ans,mid),l=mid+;
else r=mid-;
}
return ans;
} void dfs(int u)
{
int pos;
if (a[u]!=) pos=sreach(k/a[u]);
else pos=len;
sum+=getsum(pos);
//cout<<sum<<endl;
shuadd(sreach(a[u]),);
for (int i=head[u] ; i ; i=edge[i].next)
{
int v=edge[i].to;
if (vis[v]) continue;
vis[v]=true;
dfs(v);vis[v]=false;
shuadd(sreach(a[v]),-);
}
} int main()
{
int t;
scanf("%d",&t);
while (t--){
int n,j=;cas=;
scanf("%d%I64d",&n,&k);
for (int i= ; i<=n ; i++) {
scanf("%I64d",&a[i]);
if (a[i]==) continue;
b[i]=a[i];
}
sort(b+,b+n+);
len=unique(b+,b+n+)-b;
sort(b+,b+len);len--;
// cout<<len<<endl;
memset(du,,sizeof(du));
memset(vis,false,sizeof(vis));
memset(head,,sizeof(head));
memset(has,,sizeof(has));
for (int i= ; i<n ; i++){
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
du[v]++;
}
//cout<<len<<endl;
sum=;
for (int i= ; i<=n ; i++)
{
if (du[i]) continue;
dfs(i);
}
printf("%I64d\n",sum);
}
return ;
}
hdu 5877 (dfs+树状数组) Weak Pair的更多相关文章
- Weak Pair (dfs+树状数组)
Weak Pair (dfs+树状数组) 题意 这个题目是要求:一颗树上,有n个节点,给出每个节点的权值.另外给出一个值k,问有多少对节点满足: \(power[u]*power[v]<=k\) ...
- codeforces 1076E Vasya and a Tree 【dfs+树状数组】
题目:戳这里 题意:给定有n个点的一棵树,顶点1为根.m次操作,每次都把以v为根,深度dep以内的子树中所有的顶点(包括v本身)加x.求出最后每个点的值为多少. 解题思路:考虑到每次都只对点及其子树操 ...
- HDU - 5877 Weak Pair (dfs+树状数组)
题目链接:Weak Pair 题意: 给出一颗有根树,如果有一对u,v,如果满足u是v的父节点且vec[u]×vec[v]<=k,则称这对结点是虚弱的,问这棵树中有几对虚弱的结点. 题解: 刚开 ...
- HDU 5877 Weak Pair DFS + 树状数组 + 其实不用离散化
http://acm.hdu.edu.cn/listproblem.php?vol=49 给定一颗树,然后对于每一个节点,找到它的任何一个祖先u,如果num[u] * num[v] <= k.则 ...
- HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Tota ...
- 2016 大连网赛---Weak Pair(dfs+树状数组)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5877 Problem Description You are given a rooted ...
- hdu_5877_Weak Pair(离散+DFS+树状数组)
题目链接:hdu_5877_Weak Pair 题意: 给你一棵树,让你找有多少对满足那两个条件的weak pair 题解: 有人用Treap,我不会,然后我用树状数组+离散来替代Treap,用DFS ...
- HDU 6203 2017沈阳网络赛 LCA,DFS+树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6203 题意:n+1 个点 n 条边的树(点标号 0 ~ n),有若干个点无法通行,导致 p 组 U V ...
- CF Edu54 E. Vasya and a Tree DFS+树状数组
Vasya and a Tree 题意: 给定一棵树,对树有3e5的操作,每次操作为,把树上某个节点的不超过d的子节点都加上值x; 思路: 多开一个vector记录每个点上的操作.dfs这颗树,同时以 ...
随机推荐
- lnmp下启动mysql报错 The server quit without updating PID file
启动时候错误代码:Starting MySQL[FAIL.] The server quit without updating PID file (/var/run/mysqld/mysqld.pid ...
- template.js遍历对象的写法
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>菜鸟 ...
- C学习笔记
1.struct struct 是一种复合数据类型,其构成元素可以是一些复合数据类型,如array,struct,union,缺省情况下,编译器为结构体的每个成员按其自然对齐(默认对齐,按照结构体成员 ...
- excel 作图中次横坐标及次纵坐标的调试,以及excel自定义轴标签的步骤方法
在工作中除了要做一些常用的图表之外,不时还会有一切奇怪图表的制作需求. 今天的内容主要记录的是如何对excle图表的次横坐标及次纵坐标进行调试,以及如何自定义调整轴标签 首先看下如何做次纵坐标,工作中 ...
- 关于ddpush推动实现抖动视频的使用
/** //开机之后打开服务 开机成功打开服务ddpushService**/ <!-- 开机广播 --> <receiver android:name="com.r ...
- Window 对象详解 转自 http://blog.csdn.net/jcx5083761/article/details/41243697
详解HTML中的window对象和document对象 标签: HTMLwindowdocument 2014-11-18 11:03 5884人阅读 评论(0) 收藏 举报 分类: HTML& ...
- MYSQL 中 update set from where 问题
MySQL 和 SQLSERVER不一样,update set from 一张表的时候 应该改为 UPDATE TABLE_AA INNER JOIN TABLE_BB ON TABLE_AA.ID ...
- C++:名字查找先于类型检查
Sub-Title: Name Hiding. "In C++, there is no overloading across scopes - derived class scopes a ...
- 关于nginx的1W并发的优化
我们来看一下图,下面的这张图清晰的表明了nginx优化的一些方法: nginx要响应请求的话,必须要: 1.要建立socket连接 2.是要读本地的文件 所以这就是我们的一个优化的方向: 所以参考照上 ...
- CSS3基础03(3D②) 求粉丝
3 D (3.1)rotateY 围绕着Y轴进行旋转 (1)正数是(站在右边推),负数是(站在左边推) (2.1)定义元素背过去是否可见 backface-visibility: visible|hi ...