HDU - 5877 Weak Pair (dfs序+树状数组+离散化)

VJ地址

题意:给一个有根树给你,计算一下满足下列条件的序列对的数目
(1)u是v的祖先(不能是它自己)
(2)a[v]*a[u]<=k

思路:用DFS序分裂每一条链,使链上的点都是当前加入点的祖先,用树状数组维护,or线段树,因为是单点修改就用就树状数组了。 每次加入点前,计算小于等于k/a[v]点的数量。还有数据大小是1e9,但是只有1e5个点,要离散化处理。

ps:还有要自己找到根节点。

具体细节:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <bits/stdc++.h>
#define INF 2e18
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define se secondusing namespace std;
typedef long long  ll;
typedef unsigned long long  ull;
typedef pair<int,int > pii;
int dx[4]= {-1,1,0,0},dy[4]= {0,0,1,-1};
const ll mod=1e9+7;
const ll N =2e5+10;
const double eps = 1e-4;
const double pi=acos(-1);
ll gcd(int a,int b){return !b?a:gcd(b,a%b);}
using namespace std;
vector<int> g[N];
ll n,k;
ll a[N];
ll lsh[N];
ll sum;
ll cnt;
ll c[N];
int vis[N];
ll getid(ll x)
{return lower_bound(lsh+1,lsh+cnt+1,x)-lsh;
}
void add(ll x,ll v)
{while(x<=N){c[x]+=v;x+=lowbit(x);}
}
ll query(ll x)
{ll ans=0;while(x){ans+=c[x];x-=lowbit(x);}return ans;
}
void dfs(int u,int p){add(getid(a[u]),1);for(int v:g[u]){if(v==p) continue;sum+=query(getid(k/a[v]+1)-1);dfs(v,u);}add(getid(a[u]),-1);
}
void sovle(){sum=0;cin>>n>>k;FILL(c,0);FILL(vis,0);for(int i=1;i<=n;i++) {cin>>a[i];lsh[i]=a[i];}sort(lsh+1,lsh+1+n);cnt=unique(lsh+1,lsh+n+1)-lsh-1;for(int i=1;i<n;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);vis[v]=1;}for(int i=1;i<=n;i++){if(!vis[i]) {dfs(i,0);break;}}cout<<sum<<endl;for(int i=1;i<=n;i++) g[i].clear();
}
int main()
{iosint t=1;cin>>t;while(t--){sovle();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #614 (Div. 2) D. Aroma‘s Search 暴力 + 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你x0,y0,ax,ay,bx,byx_0,y_0,a_x,a_y,b_x,b_yx0​,y0​,ax​,ay​,bx​,by​&#xff0c;让后根据[ax∗xi−1bx,ay∗yi−1by][a_x*x_{i-1}b_x,a_y*y_{i-1}b_y][ax​∗xi−1​bx​,ay​∗yi−1​by​]构造出…

Insider Dev Tour 2019巡演中国站

Insider Dev Tour 2019全球巡演中国站落下帷幕&#xff0c;在线直播加六大城市会场&#xff0c;作为四十余位讲师的一份子&#xff0c;我在线分享了Microsoft Graph及Microsoft Teams开发平台的内容&#xff0c;很高兴与几千位开发者共同度过了一个特别的星期天&#xff0c;很不…

HDU - 6267 (概论/找规律/递推)

VJ地址 题目大意&#xff1a; 有n个节点 从0-&#xff08;n-1&#xff09;&#xff0c;连边的规律为 即i点的父亲只能是比i小的数&#xff0c;而且是随机的&#xff0c;现在随机选择应该一个节点作为根&#xff0c;求这子树的和的期望是多少。 思路&#xff1a;可以知道总共有…

Educational Codeforces Round 81 (Rated for Div. 2) D. Same GCDs 欧拉函数\莫比乌斯

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给定a,ma,ma,m&#xff0c;求满足gcd(a,m)gcd(ax,m)gcd(a,m)gcd(ax,m)gcd(a,m)gcd(ax,m)的xxx的个数&#xff0c;且0<x<m0<x<m0<x<m。 思路&#xff1a; 由辗转相除法得&#xff1a;gcd…

Microsoft Graph Toolkit 初探

在今年的Build大会上面, Microsoft Graph 产品组公开宣布了一套新的Web组件&#xff0c;Microsoft Graph Toolkit&#xff08;简称mgt&#xff09;&#xff0c;这套组件可以与任何前端开发平台无缝整合&#xff0c;通过几行代码就能实现基于Microsoft Graph的应用&#xff0c;而…

CodeCraft-21 and Codeforces Round #711 (Div. 2) 题解

先上链接CodeCraft-21 and Codeforces Round #711 (Div. 2) A&#xff1a; 从n开始往后找&#xff0c;不出几十个 一定能找到的&#xff0c;所以暴力就好了 void sovle(){cin>>n;while(1){ll kn;ll sum0;while(k) sumk%10,k/10;if(gcd(n,sum)>1) {cout<<n<&…

Educational Codeforces Round 81 (Rated for Div. 2) B. Infinite Prefixes 数学

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你个串sss&#xff0c;让后把它重复无限次得到ttt&#xff0c;定义前缀的价值为cnt0−cnt1cnt_0-cnt_1cnt0​−cnt1​&#xff0c;求ttt的前缀价值为xxx的前缀个数&#xff0c;若有无限多输出−1-1−1。 …

终于等到你!微软正式上线 Windows Terminal 预览版

前一段时间&#xff0c;一直在知乎、技术社区收到技术小伙伴们的终极拷问&#xff1a;微软Build 大会上提到的「6月中旬」要上Windows store 的 Windows Terminal 到底啥时候可以用到呀&#xff1f;有一次&#xff0c;我跑去我给 Windows Terminal 提的某个 issue 里问 Windows…

牛客练习赛76 E 牛牛数数(线性基加二分)

牛客地址 思路&#xff1a;全部组合异或&#xff0c;很容易想到使用线性基&#xff0c;正好线性基中有一个求第k小的用法&#xff0c;那我们可以二分来找 K是第几小的数&#xff0c;然后用总数减去。 #include <iostream> #include <cstdio> #include <fstream…

Educational Codeforces Round 81 (Rated for Div. 2) E. Permutation Separation 线段树 + dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个打乱的排列&#xff0c;每个位置都各有一个价值&#xff0c;让你选择一个分界点&#xff0c;分成p1,p2,...,prp_1,p_2,...,p_rp1​,p2​,...,pr​和pr1,...,pn−1,pnp_{r1},...,p_{n-1},p_{n}pr1​,…

几种设计良好结构以提高.NET性能的方法

写在前面设计良好的系统&#xff0c;除了架构层面的优良设计外&#xff0c;剩下的大部分就在于如何设计良好的代码&#xff0c;.NET提供了很多的类型&#xff0c;这些类型非常灵活&#xff0c;也非常好用&#xff0c;比如List&#xff0c;Dictionary、HashSet、StringBuilder、…

牛客挑战赛47 D Lots of Edges(最短路+递归枚举子集)

牛客挑战赛47 D Lots of Edges 思路&#xff1a;点的权值最多只有&#xff08;1<<17&#xff09;-1(131071) ,那我们可以枚举终点的值来算最短路&#xff0c;每个点能连边的值都是固定的&#xff0c;可以通过递归枚举子集&#xff08;技巧&#xff09;来找&#xff0c;每…

Codeforces Round #715 (Div. 2) C. The Sports Festival 区间dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给定一个序列aaa&#xff0c;每次拿出来任意一个数(注意每次选的数不同)&#xff0c;让后定义maxmax(a1,a2,...,ai)maxmax(a_1,a_2,...,a_i)maxmax(a1​,a2​,...,ai​)&#xff0c;minmin(a1,a2,...,ai)min…

.NET CORE下最快比较两个文件内容是否相同的方法

最近项目有个需求,需要比较两个任意大小文件的内容是否相同,要求如下:项目是.NET CORE,所以使用C#进行编写比较方法文件大小任意,所以不能将文件内容全部读入到内存中进行比较(更专业点说,需要使用非缓存的比较方式)不依赖第三方库越快越好为了选出最优的解决方案,我搭建了一个…

牛客挑战赛47 A 一道GCD问题

牛客挑战赛47 A 一道GCD问题 思路参考牛客上的题解&#xff1a; 根据多维的更相减损术得gcd(x,y,z)gcd(x,y−x,z−y)得 gcd(a1k,a2k,a3k…,ank)gcd(a1k,a2-a1,a3-a2…)gcd(a1k,a2k,a3k…,ank)gcd(a1k,a2−a1,a3−a2…) 我们很容易可以求得等式右边的值为g我们很容易可以求得等…

Codeforces Round #715 (Div. 2) D. Binary Literature 构造

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你个nnn和三个长度为n∗2n*2n∗2的串&#xff0c;让你构造一个长度≤n∗3\le n*3≤n∗3的串&#xff0c;使其子序列包含至少两个给定串。 思路&#xff1a; 先考虑如果没有长度限制&#xff0c;那么我们…

[译]试用新的System.Text.Json API

译注尝试新的System.Text.Json API对于.NET Core 3.0&#xff0c;我们 提供了一个名为System.Text.Json的全新命名空间 &#xff0c;支持读取器/写入器&#xff0c;文档对象模型&#xff08;DOM&#xff09;和序列化。在这篇博文中&#xff0c;我告诉你为什么我们建造它&#x…

牛客挑战赛47 C 条件(Floyd bitset优化)

牛客挑战赛47 C 条件 思路&#xff1a;首先我们要两个图&#xff0c;一个是一定能到达的&#xff0c;一个是可能到达的&#xff0c;如果我们使用floyd (n^3)就有可能会超时&#xff0c;因为只要求询问能否到达&#xff0c;所以权值只有0和1&#xff0c;那我们可以使用bitset来…

Educational Codeforces Round 81 (Rated for Div. 2) C. Obtain The String 序列自动机

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两个串s,ts,ts,t&#xff0c;每次可以取sss串的一个子序列&#xff0c;问你最少取多少次子序列&#xff0c;将这些子序列拼起来能得到ttt。 思路&#xff1a; 发现我题解里面没写过序列自动机&#xf…

牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)

牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作&#xff0c;最后得到的答案会是最大的&#xff0c;那我们可以将它放进一个最小堆中来维护&#xff0c;但是里面的数是需要取模的&#xff0c;当它取模的时候&#xff0c;将会变小。那我们可以用一…