//树形DP+树状数组 HDU 5877  Weak Pair
// 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值
// 这道题要离散化 #include <bits/stdc++.h>
using namespace std;
#define LL long long
typedef pair<int,int> pii;
const double inf = 123456789012345.0;
const LL MOD =100000000LL;
const int N = 2e5+;
const int maxx = ;
#define clc(a,b) memset(a,b,sizeof(a))
const double eps = 1e-;
void fre() {freopen("in.txt","r",stdin);}
void freout() {freopen("out.txt","w",stdout);}
inline int read() {int x=,f=;char ch=getchar();while(ch>''||ch<'') {if(ch=='-') f=-; ch=getchar();}while(ch>=''&&ch<='') {x=x*+ch-'';ch=getchar();}return x*f;} map<LL,LL> ma;
LL a[N];
LL c[N],b[N];
LL in[N];
vector<LL> g[N];
LL lowbit(LL x){ return x&(-x);}
LL add(LL x,int t){
while(x>){
c[x]+=t;
x-=lowbit(x);
}
}
LL Sum(LL x){
LL sum=;
while(x<maxx){
sum+=c[x];
x+=lowbit(x);
}
return sum;
} LL ans=;
LL n,k;
void dfs(LL rt){
for(LL i=;i<(int)g[rt].size();i++){
LL v=g[rt][i];
ans+=Sum(ma[a[v]]);
if(a[v]==) add(maxx,);
else add(ma[k/a[v]],);
dfs(v);
if(a[v]==) add(maxx,-);
else add(ma[k/a[v]],-);
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
ma.clear();
memset(c,,sizeof(c));
scanf("%I64d%I64d",&n,&k);
for(int i=;i<=n;i++){
scanf("%I64d",&a[i]);
b[i*-]=a[i];
if(a[i]!=) b[i*-]=k/a[i];
g[i].clear();
in[i]=;
}
sort(b,b+*n);
int K=unique(b,b+*n)-b;
int cxt=;
for(int i=;i<K;i++){
ma[b[i]]=++cxt;
}
for(LL i=;i<n-;i++){
LL u,v;
scanf("%I64d%I64d",&u,&v);
g[u].push_back(v);
in[v]++;
}
LL rt;
for(LL i=;i<=n;i++){
if(in[i]==){
rt=i;
break;
}
}
ans=;
if(a[rt]==) add(maxx,);
else add(ma[k/a[rt]],);
dfs(rt);
printf("%I64d\n",ans);
}
return ;
}

树形DP+树状数组 HDU 5877 Weak Pair的更多相关文章

  1. bzoj 1264 [AHOI2006]基因匹配Match(DP+树状数组)

    1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 793  Solved: 503[Submit][S ...

  2. 【bzoj2274】[Usaco2011 Feb]Generic Cow Protests dp+树状数组

    题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row andnumbered 1..N. The cows ...

  3. 奶牛抗议 DP 树状数组

    奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到\(DP\),设\(f[i]\)表示为在第\(i\)位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i] ...

  4. HDU 5877 Weak Pair(弱点对)

    HDU 5877 Weak Pair(弱点对) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Jav ...

  5. HDU 5877 Weak Pair(树状数组)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5877 [题目大意] 给出一棵带权有根树,询问有几对存在祖先关系的点对满足权值相乘小于等于k. [题 ...

  6. HDU 5877 Weak Pair(树状数组+dfs+离散化)

    http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意: 给出一棵树,每个顶点都有权值,现在要你找出满足要求的点对(u,v)数,u是v的祖先并且a[u]*a ...

  7. HDU - 5877 Weak Pair (dfs+树状数组)

    题目链接:Weak Pair 题意: 给出一颗有根树,如果有一对u,v,如果满足u是v的父节点且vec[u]×vec[v]<=k,则称这对结点是虚弱的,问这棵树中有几对虚弱的结点. 题解: 刚开 ...

  8. hdu 5877 Weak Pair dfs序+树状数组+离散化

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Prob ...

  9. HDU 5877 Weak Pair DFS + 树状数组 + 其实不用离散化

    http://acm.hdu.edu.cn/listproblem.php?vol=49 给定一颗树,然后对于每一个节点,找到它的任何一个祖先u,如果num[u] * num[v] <= k.则 ...

随机推荐

  1. [Unity菜鸟] Time

    1. Time.deltaTime 增量时间 以秒计算,完成最后一帧的时间(秒)(只读) 帧数所用的时间不是你能控制的.每一帧都不一样,游戏一般都是每秒60帧,也就是updata方法调用60次(假如你 ...

  2. Could not connect to SMTP host: smtp.***.com, port: 465, response: -1

    背景 在使用javamail进行邮件发送的时候,报错: Could not connect to SMTP host: smtp.***.com, port: 465, response: -1 原因 ...

  3. 【翻译】Zakas解答Baranovskiy的JavaScript测验题

    原文:http://www.nczonline.net/blog/2010/01/26/answering-baranovskiys-javascript-quiz/ ---------------- ...

  4. 量化生产力Quantifying Productivity

    I'm always on a lookout for interesting datasets to collect, analyze and interpret. And what better ...

  5. 内存泄露了么: Handlers & Inner Classes

    看到一篇关于handler和匿名类关于内存泄露的文章,觉得不错,充分发挥拿来主义,先放这儿看着! From:http://www.androiddesignpatterns.com/2013/01/i ...

  6. python获取外网地址

    # coding=gbk import sys,urllib.request,re url = "http://www.3322.org/dyndns/getip" #网页地址 m ...

  7. hadoop2 环境的搭建(自动HA)

    zookeeper:hadoop112.hadoop113.hadoop114 namenode:hadoop110和hadoop111 datanode:hadoop112.hadoop113.ha ...

  8. 在BSP的.bat文件下設置全局變量方法

    用于多個產品共用一個BSP的時候,在BSP的.bat文件中設置全局變量,去掉不需要加載的驅動和不同點是很好的方法. 一,舉例:BSP中.bat的一段code: set BSP_SMDK2443=1 s ...

  9. 使用Quartz创建定时任务

    项目开发中经常需要定时循环执行某些任务 比如定时发送报表,定时发送邮件,亦或者定时清理缓存,定时更新数据等等 有些时候可以简单地利用Windows Server的计划任务执行程序 Linux也有相应的 ...

  10. poj3207 Ikki’s Story IV – Panda’s Trick

    2-SAT. tarjan缩点.强连通分量的点要选一起选. #include<cstdio> #include<algorithm> #include<cstring&g ...