hdu5877 Weak Pair 【树状数组+dfs】
来源:互联网 发布:如何查看数据库主键 编辑:程序博客网 时间:2024/06/03 14:26
#pragma comment(linker, "/STACK:1024000000,1024000000")#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <cmath>#include <stdlib.h>#include <time.h>using namespace std;const int N=2e5+10;typedef long long ll;ll ans,k,a[N],w[N],b[N];int n,in[N],c[N];vector<int>g[N];int get(int x){ int ret=0; //if(x>n) x=2*n; while(x>0) { ret+=c[x]; x-=x&-x; } return ret;}void add(int x,int val){ while(x<=2*n) { c[x]+=val; x+=x&-x; }}void dfs(int x){ ans+=get(w[x]); add(a[x],1); for(int i=0;i<g[x].size();i++) { int y=g[x][i]; dfs(y); } add(a[x],-1);}int main(){ int _,u,v; scanf("%d",&_); while(_--) { scanf("%d%lld",&n,&k); for(int i=1;i<=n;i++) g[i].clear(); for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); if(a[i]==0) w[i]=1e18; else w[i]=k/a[i]; b[2*i-2]=a[i]; b[2*i-1]=w[i]; } sort(b,b+2*n); for(int i=1;i<=n;i++) { a[i]=lower_bound(b,b+2*n,a[i])-b+1; w[i]=lower_bound(b,b+2*n,w[i])-b+1; } memset(in,0,sizeof(in)); memset(c,0,sizeof(c)); for(int i=1;i<n;i++) { scanf("%d%d",&u,&v); g[u].push_back(v); in[v]++; } int rt; for(int i=1;i<=n;i++) { if(!in[i]) { rt=i; break; } } ans=0; dfs(rt); printf("%lld\n",ans); } return 0;}/*#pragma comment(linker, "/STACK:1024000000,1024000000")#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <cmath>#include <stdlib.h>#include <time.h>using namespace std;const int N=2e5+10;typedef long long ll;ll ans,k,a[N],b[N];int n,in[N],c[N];vector<int>g[N];int get(int x){ int ret=0; while(x>0) { ret+=c[x]; x-=x&-x; } return ret;}void add(int x,int val){ while(x<=2*n) { c[x]+=val; x+=x&-x; }}void dfs(int x){ ll v; if(b[a[x]-1]==0) v=n+5; else { v=k/b[a[x]-1]; v=lower_bound(b,b+n,v)-b+1; } //printf("%d %d %d %d\n",v,x,get(n),get(v+1)); ans+=get(v); add(a[x],1); for(int i=0;i<g[x].size();i++) { int y=g[x][i]; dfs(y); } add(a[x],-1);}int main(){ int _,u,v; scanf("%d",&_); while(_--) { scanf("%d%lld",&n,&k); for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); b[i-1]=a[i]; } for(int i=1;i<=n;i++) { g[i].clear(); } sort(b,b+n); for(int i=1;i<=n;i++) { a[i]=lower_bound(b,b+n,a[i])-b+1; } memset(in,0,sizeof(in)); memset(c,0,sizeof(c)); for(int i=1;i<n;i++) { scanf("%d%d",&u,&v); g[u].push_back(v); in[v]++; } int rt; for(int i=1;i<=n;i++) { if(!in[i]) { rt=i; break; } } ans=0; dfs(rt); printf("%lld\n",ans); } return 0;}*/
0 0
- hdu5877 Weak Pair 【树状数组+dfs】
- hdu5877 Weak Pair(DFS+树状数组)
- HDU5877 Weak Pair(树状数组+dfs)
- hdu5877 Weak Pair(离散化+树状数组+dfs)
- HDU5877 Weak Pair dfs + 线段树/树状数组 + 离散化
- hdu5877 Weak Pair(树状数组+map)
- HDU 5877 Weak Pair 树状数组 + DFS
- hdu5877 dfs序+树状数组
- hdu5877 Weak Pair
- HDU5877 Weak Pair
- HDU5877-Weak Pair
- HDU5877-Weak Pair
- 【HDU5877】Weak Pair(线段树+dfs+离散化)
- hdu5877 Weak Pair(dfs+线段树+离散化)
- hdu5877 Weak Pair(离散化+线段树+dfs)
- hdu 5877 Weak Pair(dfs+树状数组)
- HDU 5877 Weak Pair(dfs + 树状数组 + 离散化)
- hdu 5877 Weak Pair(树状数组 + dfs + 离散化)
- 五大主流数据库模型
- refreshed 问题
- 一个帖子学会Android开发四大组件
- java Thread join方法
- 我对MVVM的理解
- hdu5877 Weak Pair 【树状数组+dfs】
- 服务器session持久化 SESSION.ser文件
- db2事务日志满,或者日志磁盘空间已满解决办法
- LeetCode: Kth Largest Element in an Array
- 类初始化场景 JDK1.7
- hihoCoder#1082 : 然而沼跃鱼早就看穿了一切(做题总结)
- 使用 XStream 把 Java 对象序列化为 XML
- Windows和Kali:重装Windows的MBR恢复问题
- 15级南阳理工软件学院卓越班笔试面试总结