hdu 5877 Weak Pair(dfs+树状数组)
来源:互联网 发布:淘宝购物的步骤 编辑:程序博客网 时间:2024/06/06 01:03
代码:
#include <map>#include <set>#include <stack>#include <queue>#include <cmath>#include <string>#include <vector>#include <cstdio>#include <cctype>#include <cstring>#include <sstream>#include <cstdlib>#include <iostream>#include <algorithm>#pragma comment(linker,"/STACK:102400000,102400000")using namespace std;#define MAX 100005#define MAXN 1000005#define maxnode 15#define sigma_size 30#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define lrt rt<<1#define rrt rt<<1|1#define middle int m=(r+l)>>1#define LL long long#define ull unsigned long long#define mem(x,v) memset(x,v,sizeof(x))#define lowbit(x) (x&-x)#define pii pair<int,int>#define bits(a) __builtin_popcount(a)#define mk make_pair#define limit 10000//const int prime = 999983;const int INF = 0x3f3f3f3f;const LL INFF = 0x3f3f;const double pi = acos(-1.0);const double inf = 1e18;const double eps = 1e-8;const int mod = 1e9+7;const ull mx = 133333331;/*****************************************************/inline void RI(int &x) { char c; while((c=getchar())<'0' || c>'9'); x=c-'0'; while((c=getchar())>='0' && c<='9') x=(x<<3)+(x<<1)+c-'0'; }/*****************************************************/struct Edge{ int v,next;}edge[MAX];int head[MAX];int degree[MAX];LL a[MAX];LL b[MAX];LL x[MAX*2];int tot;int cnt;int sum[MAX*2];LL ans;void init(){ mem(head,-1); mem(degree,0); mem(sum,0); tot=0;}void add_edge(int a,int b){ edge[tot]=(Edge){b,head[a]}; head[a]=tot++;}int query(int x){ int ret=0; while(x){ ret+=sum[x]; x-=lowbit(x); } return ret;}void add(int x,int d){ while(x<=cnt){ sum[x]+=d; x+=lowbit(x); }}void dfs(int u){ int pos=lower_bound(x,x+cnt,b[u])-x+1; int xx=lower_bound(x,x+cnt,a[u])-x+1; ans+=query(pos); add(xx,1); for(int i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v; dfs(v); } add(xx,-1);}int main(){ //freopen("in.out","r",stdin); int t; cin>>t; while(t--){ int n; LL k; cin>>n>>k; init(); cnt=0; for(int i=1;i<=n;i++){ scanf("%I64d",&a[i]); x[cnt++]=a[i]; if(a[i]==0) b[i]=1e18+5; else b[i]=k/a[i]; x[cnt++]=b[i]; } sort(x,x+cnt); cnt=unique(x,x+cnt)-x; for(int i=1;i<n;i++){ int aa,b; scanf("%d%d",&aa,&b); add_edge(aa,b); degree[b]++; } int root=0; for(int i=1;i<=n;i++){ if(!degree[i]) root=i; } ans=0; dfs(root); cout<<ans<<endl; } return 0;}
0 0
- HDU 5877 Weak Pair 树状数组 + DFS
- hdu 5877 Weak Pair(dfs+树状数组)
- hdu 5877 Weak Pair(树状数组 + dfs + 离散化)
- hdu 5877 Weak Pair(树状数组)
- HDU 5877 Weak Pair(dfs + 树状数组 + 离散化)
- HDU 5877 Weak Pair 【dfs】【树状数组】【离散化】
- HDU 5877 Weak Pair dfs序 + 树状数组 + 离散化
- hdu 5877 Weak Pair dfs + 线段树(or树状数组)
- 2016 大连网络赛 HDU 5877 Weak Pair (DFS + 树状数组 + 离散化)
- HDU-5877-Weak Pair(离散+树状数组)
- HDU 5877 Weak Pair (dfs 树状数组 || dfs序 主席树)
- hdu 5877 Weak Pair (树状树状 +dfs)
- HDU-5877-Weak Pair【树状数组】【离散化】【DFS】【2016大连网络】【好题】
- HDU 5877 Weak Pair(离散化+dfs+树状数组) 大连区域网络赛
- hdu5877 Weak Pair 【树状数组+dfs】
- hdu5877 Weak Pair(DFS+树状数组)
- HDU5877 Weak Pair(树状数组+dfs)
- HDU 5877 Weak Pair(dfs+BIT)
- Timus Online Judge:2010. Sasha the Young Grandmaster
- 楼新闻
- HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)
- HDU1171-Big Event in HDU
- LibGdx文档译读(五)Graphics接口
- hdu 5877 Weak Pair(dfs+树状数组)
- Hibernate的HQL中in参数设置
- Android Studio常用快捷键
- 生成短信验证码的方法
- 【计算机视觉】<前景检测>非参数背景模型介绍<二>
- 《java多线程编程核心技术》读书笔记3:线程间的通信
- 在MyEclipse10上远程连接虚拟机上的Hive,报错:Could not establish connection to 192.168.1.100:10000/log: java.net.Co
- seekg()与tellg()相关文件操作
- c语言之内存管理