HDU - 5877 Weak Pair (dfs+树状数组)
题目链接:Weak Pair
题意:
给出一颗有根树,如果有一对u,v,如果满足u是v的父节点且vec[u]×vec[v]<=k,则称这对结点是虚弱的,问这棵树中有几对虚弱的结点。
题解:
刚开始看到这题,无脑暴力dfs从叶子结点向上递归,TLE了一发神清气爽@。@!所以用树状数组优化dfs,从根节点向下递归,在结点x找所有满足<=k/vec[x]的点的个数。这里因为数据很大要离散化一下,在输入的时候就把vec[x]和M/vec[x]都放数组里面,sort一下后再放到map里面。这题学了一下用树状数组优化dfs,感觉挺好的~
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1e5+;
vector<int> P[MAX_N];
int in[MAX_N];
long long vec[MAX_N*];
long long vec1[MAX_N*];
long long res[MAX_N*];
long long pos[MAX_N*];
map<long long ,int > mp;
long long ans = ;
long long N,M,T;
void add(int x,long long num)
{
for(;x<*MAX_N;x+=(x&-x))
res[x] += num;
}
long long sum(int x)
{
long long ans = ;
for(;x>;x-=(x&-x))
ans += res[x];
return ans;
}
void dfs(int x)
{
ans += sum(mp[M/vec[x]]);
add(mp[vec[x]],);
for(int i=;i<P[x].size();i++)
{
dfs(P[x][i]);
}
add(mp[vec[x]],-);
}
int main()
{
cin>>T;
while(T--)
{
mp.clear();
memset(in,,sizeof(in));
memset(res,,sizeof(res));
for(int i=;i<MAX_N;i++) P[i].clear();
cin>>N>>M;
for(int i=;i<=N;i++)
{
scanf("%lld",&vec[i]);
vec1[i+N] = M/vec[i];
vec1[i] = vec[i];
}
sort(vec1+,vec1+*N+);
for(int i=;i<=*N;i++)
{
mp.insert(make_pair(vec1[i],i));
}
for(int i=;i<N-;i++)
{
int a,b;
scanf("%d%d",&a,&b);
P[a].push_back(b);
in[b] ++;
}
int point = ;
for(int i=;i<=N;i++)
{
if(!in[i])
{
point = i;
break;
}
}
ans = ;
dfs(point);
cout<<ans<<endl;
}
return ;
}
HDU - 5877 Weak Pair (dfs+树状数组)的更多相关文章
- HDU 5877 Weak Pair DFS + 树状数组 + 其实不用离散化
http://acm.hdu.edu.cn/listproblem.php?vol=49 给定一颗树,然后对于每一个节点,找到它的任何一个祖先u,如果num[u] * num[v] <= k.则 ...
- HDU 5877 Weak Pair(树状数组+dfs+离散化)
http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意: 给出一棵树,每个顶点都有权值,现在要你找出满足要求的点对(u,v)数,u是v的祖先并且a[u]*a ...
- HDU 5877 Weak Pair(树状数组)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5877 [题目大意] 给出一棵带权有根树,询问有几对存在祖先关系的点对满足权值相乘小于等于k. [题 ...
- 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序+树状数组+离散化
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Prob ...
- 树形DP+树状数组 HDU 5877 Weak Pair
//树形DP+树状数组 HDU 5877 Weak Pair // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 // 这道题要离散化 #i ...
- Weak Pair (dfs+树状数组)
Weak Pair (dfs+树状数组) 题意 这个题目是要求:一颗树上,有n个节点,给出每个节点的权值.另外给出一个值k,问有多少对节点满足: \(power[u]*power[v]<=k\) ...
- HDU 5877 Weak Pair(弱点对)
HDU 5877 Weak Pair(弱点对) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Jav ...
- HDU 5862 Counting Intersections(离散化+树状数组)
HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...
随机推荐
- model.object对象查询过滤、增删改、Q
vm.objects.all()[:10] #获得前10个对象,不支持负索引 vm.objects.get(name='vmname') vm.objects.filter(name='vmname' ...
- Celery学习--- Celery在项目中的使用
可以把celery配置成一个应用,注意连接文件命名必须为celery.py 目录格式如下 项目前提: 安装并启动Redis CeleryPro/celery.py [命名必须为celery.py] ...
- 绕过CDN查找网站真实IP方法收集
方法1很简单,使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一多半是使用了CDN, 多地 Ping 网站有: http://ping.chinaz.com/ http://pi ...
- SMTP服务器设置
Web.config中使用如下配置 <system.net> <mailSettings> <smtp from="info@site.c ...
- Zepto的SwipeUp 在 android 和微信 的解决方案
Zepto的SwipeUp 在 android 和微信 的解决方案 时间:2016-04-19 22:20:09 作者:zhongxia 问题解决方案: Q:为什么swipeUp和swipeDown在 ...
- select 下拉框 disabled 则 Form 获取不到值
select 下拉框 disabled 则 Form 获取不到值 有时候需要禁用 下拉框 , 但是表单又需要获取到 下拉框的值. 解决方案1: 使用文本框和隐藏域 来代替下拉框 disabled 解决 ...
- APP的案例分析
很多同学有误解,软件项目管理是否就是理论课?或者是几个牛人拼命写代码,其他人打酱油的课?要不然就是学习一个程序语言,搞一个职业培训的课?都不对,软件项目管理有理论,有实践,更重要的是分析,思辨,总结. ...
- 原生JS和jQuery分别使用jsonp来获取“当前天气信息”
需掌握的技能点: jsonp.跨域相关等. 以下两种代码,均可直接运行. 1.使用原生JS: <!DOCTYPE html> <html lang="en"> ...
- 切换composer国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- vue打包以后,除了首页意外,其余页面是空白
针对vue项目打包以后,除了首页意外,其余页面是空白的,需要在服务端进行配置. 原因是router中,mode是history引起的 如果是nginx,改成如下: location / { root ...