hdu 5877
来源:互联网 发布:莫比乌斯环戒指知乎 编辑:程序博客网 时间:2024/06/09 19:02
#include <iostream>#include <cstdio>#include <vector>#include <cmath>#include <string>#include <string.h>#include <algorithm>using namespace std;#define LL __int64#define eps 1e-8#define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1#define MAXN 400020#define clr(x) memset(x,0,sizeof(x))#define clr2(x) memset(x,INF,sizeof(x))#define clr3(x) memset(x,-INF,sizeof(x))#define clr4(x) memset(x,-1,sizeof(x))const int maxn = 400000 + 5;struct Node { LL h; int pos; bool operator < (const Node tmp) const { return h < tmp.h; }} a[maxn];struct Section { int L , R ; LL H; int index; bool operator < (const Section tmp) const { return H < tmp.H; }} s[maxn];int cnt[maxn << 2] , ans[maxn];void PushUp(int rt){ cnt[rt] = cnt[rt << 1] + cnt[rt << 1 | 1];}void build(){ memset(cnt , 0 , sizeof(cnt));}void update(int p , int l , int r , int rt){ if(l == r) { cnt[rt]++; return; } int m = (l + r) >> 1; if(p > m) update(p , rson); else update(p , lson); PushUp(rt);}int query(int L , int R , int l , int r , int rt){ if(L <= l && R >= r) { return cnt[rt]; } int m = (l + r) >> 1; if(L > m) return query(L , R , rson); else if(R <= m) return query(L , R , lson); else return query(L , R , lson) + query(L , R , rson);}struct Edge{ int to,next;}edge[MAXN];int head[MAXN],cnte;int in[MAXN],out[MAXN],t;void init(){ clr(edge); memset(head,-1,sizeof(head)); clr(in); clr(out); cnte=0;}void add(int u,int v){ edge[cnte].to=v; edge[cnte].next=head[u]; head[u]=cnte++;}void dfs(int u){ in[u]=++t; for (int i=head[u];~i;i=edge[i].next) { int v=edge[i].to; dfs(v); } out[u]=t;}LL tark;int deg[MAXN];LL b[MAXN];int main(){ int T , i , j , n , m; cin >> T; for(int k = 1 ; k <= T ; k++) { build(); scanf("%d%I64d",&n,&tark); for(i = 1 ; i <= n ; i++) { scanf("%d" , &b[i]); } init(); clr(deg); int u,v; for (int i=1;i<n;i++) { scanf("%d%d",&u,&v); add(u,v); deg[v]++; } int st; for (int i=1;i<=n;i++) if (deg[i]==0) { st=i; break; } t=0; dfs(st); m=n; for(i = 1 ; i <= n ; i++) { s[i].L=in[i]; s[i].R=out[i]; a[in[i]].h=b[i]; a[in[i]].pos=in[i]; if (b[i]!=0) s[i].H=tark / b[i]; else s[i].H=1e9+233; s[i].index = i; } sort(a + 1 , a + n + 1); sort(s + 1 , s + m + 1); for(i = j = 1 ; i <= m ; i++) { while(a[j].h <= s[i].H && j <= n) { update(a[j++].pos , 1 , n , 1); } if (s[i].L+1 <= s[i].R) ans[s[i].index] = query(s[i].L + 1 , s[i].R , 1 , n , 1); else ans[s[i].index] = 0; } long long sum = 0; for(i = 1 ; i <= m ; i++) sum+=ans[i]; cout<<sum<<endl; } return 0;}
0 0
- hdu 5877
- hdu 5877
- hdu 5877
- HDU 5877 treap
- HDU 5877 Weak Pair
- HDU 5877 Weak Pair
- HDU 5877 - Weak Pair
- hdu 5877 Weak Pair
- HDU-5877-Weak Pair
- HDU 5877 Weak Pair
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu 5894
- 109-记录锁(尾部加锁)
- 基于How To Tango With Django 1.9的重新实践(19)——Ajax
- 文件类型的判断
- 数据库-数据库、基本表、视图的创建,触发器的使用
- hdu 5877
- Tomcat集群-->Cluter节点配置
- 【ZCMU1895】Landlocked(最短路)
- hdu1003 Max Sum
- 00004 死亡阴影.0001:配置文件的Unity包与修改
- window7右下角向上的小图标不见了
- 立方体多个材质
- K题
- laravel administrator一款通用的后台插件使用