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

别再手动改颜色了!用这个Word宏,一键搞定Zotero参考文献超链接的蓝色样式 本文介绍如何利用Word宏一键修改Zotero参考文献的超链接颜色,解决手动调整的繁琐问题。通过详细的VBA代码解析和高级定制方案,帮助科研人员快速实现文献引用的自动化格式优化,提升论文排版效率。特别适合需要批量处理APA等标准格式蓝色超链接的用户。 阅读详情

Weak Pair HDU - 5877

You are given a rooted tree of N nodes, labeled from 1 to N. To the ith node a non-negative value ai is assigned.An ordered pair of nodes (u,v) is said to be weak if
(1) u is an ancestor of v (Note: In this problem a node u is not considered an ancestor of itself);
(2) au×av≤k
.

Can you find the number of weak pairs in the tree? 

Input
There are multiple cases in the data set.
The first line of input contains an integer T denoting number of test cases.
For each case, the first line contains two space-separated integers, N and k, respectively.
The second line contains N space-separated integers, denoting a1 to aN.
Each of the subsequent lines contains two space-separated integers defining an edge connecting nodes u and v , where node u is the parent of node v.

Constrains:

1≤N≤105

0≤ai≤109

0≤k≤1018
Output
For each test case, print a single integer on a single line denoting the number of weak pairs in the tree.
Sample Input

1
2 3
1 2
1 2

Sample Output

1
题意:

一颗树上,有n个节点,给出每个节点的权值。另外给出一个值k,问有多少对节点满足:

a[u]×a[v]≤ka[u]×a[v]≤k

u是v节点的祖先(u≠v)u是v节点的祖先(u≠v)

分析:

我们先考虑,红色节点为V,那么U为V的所有祖先节点中权值小于ka[v]ka[v]都满足。

这里写图片描述

所以我们思路不是固定一个祖先去往下找他的孩子是否满足条件,而是走到一个节点,去看他的祖先是否满足条件,这样因为dfs的性质,你走到一个节点,它的祖先必然已经走过了(否则到不了这个点),因此我们可以用数组记录祖先的情况

因为每次遍历所有祖先寻找小于等于ka[v]ka[v]的 必然超时,所以想到利用树状数组,计算值ka[v]ka[v]之前的和即可。这里需要进行离散化处理。

我们先把每个节点的权值a[i]存下来排个序,这样每次到一个节点v的时候二分查找第一个大于ka[v]ka[v]的位置,这样之前的部分就都是小于等于的了使用upper_bound即可,为什么不用lower_bound,因为lower_bound查找的是第一个大于等于的位置,所以如果找到的位置是等于的,后面还有可能有等于的,这样就不好确定了,很麻烦

那用upper_bound的时候找到的位置是第一个大于的,那么求和的时候不就多求了一个大于的不满足条件的点吗,解决这个问题是容易的,我们只需要更新的时候并不是更新原来位置,而是更新原来位置+1即可,这样用upper_bound找到的位置就是恰好所有满足条件的了,然后求和就可以了

也就是用c数组记录祖先情况,c数组初始化为0,说明还没有走任何点,每走到一个点,就更新加入进去,更新的位置为原来节点权值数组从小到大排好序的位置+1,注意退出一个节点的时候,这个点的影响就没有了,要更新删除这个点的影响

所以每次需要寻找两个下标

1 pos : 大于ka[v]ka[v]对应的第一个下标

2.posthis : 第一个大于a[v]a[v]的下标

ans += getsum(pos); // 即找到了当前节点为a[v],前面祖先节点有几个小于等于ka[v]ka[v]的值

add(posthis,1); //当前节点是下面节点的父节点,为了防止上面求和会把大于的也算上,这样我把更新的区间位置整体后移一个就可以啦

add(posthis,-1); //退出同理

code:

#include <bits/stdc++.h>
using namespace std;
#define N 200005
typedef long long ll;
int c[N];
int lowbit(int x){
    return x & (-x);
}
void update(int i,int v){
    for(; i < N; c[i] += v, i += lowbit(i));
}
int getsum(int i){
    int ans = 0;
    for(; i > 0; ans += c[i], i -= lowbit(i));
    return ans;
}
vector<int> tree[N];
int cnt;
ll ans = 0;
ll n,k;
int f[N];
int a[N];
map<int,int> vis;
vector<int> vec;
void dfs(int rt){
    int len = tree[rt].size();
    int pos = upper_bound(vec.begin(),vec.end(),k / a[rt]) - vec.begin();
    int posthis = upper_bound(vec.begin(),vec.end(),a[rt]) - vec.begin();

    ans += getsum(pos);

    update(posthis,1);

    for(int i = 0; i < len; i++){
        dfs(tree[rt][i]);
    }

    update(posthis,-1);
}
void init(){
    cnt = 1;
    ans = 0;
    vec.clear();
    vis.clear();
    for(int i = 0; i < 200003; i++){
        tree[i].clear();
        f[i] = 0;
        c[i] = 0;
    }
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        init();
        scanf("%lld%lld",&n,&k);
        for(int i = 1; i <= n; i++){
            scanf("%d",&a[i]);
            if(!vis[a[i]]){
                vec.push_back(a[i]);
                vis[a[i]] = 1;
            }
        }
        sort(vec.begin(),vec.end());
        for(int i = 1; i < n; i++){
            int u,v;
            scanf("%d%d",&u,&v);
            tree[u].push_back(v);
            f[v] = 1;
        }
        for(int i = 1; i <= n; i++){
            if(!f[i]){
                dfs(i);
                break;
            }
        }
        printf("%lld\n",ans);
    }

    return 0;
}
【DeepSeek应用实践】手把手教程:用 AnythingLLM + Ollama + DeepSeek-R1 搭建本地企业知识库 在众多的技术方案中,我们选择了 AnythingLLM、Ollama 和 DeepSeek-R1 这一组合来搭建本地知识库。Ollama 作为一个轻量级的本地化大语言模型部署工具,支持多种模型,易于安装和使用,能够快速在本地运行强大的语言模型。DeepSeek-R1 是一个专为知识库问答设计的检索增强生成(RAG)模型,它结合了检索和生成的优势,能够快速从知识库中检索相关信息并生成精准答案。而 AnythingLLM 则是一个用户友好的界面工具,可以方便地连接 Ollama 和 DeepSeek-R1 阅读详情

相关推荐

2021秋-北邮计算机导论期末考试(BUPT)

2021秋-北邮计算机导论期末考试(BUPT) 难度较低适合新手练习

weixin_73985779的博客 1496

Weak Pair (dfs+树状数组)

Weak Pair (dfs+树状数组) 题意 这个题目是要求:一颗树上,有n个节点,给出每个节点的权值。另外给出一个值k,问有多少对节点满足: \(power[u]*power[v]<=k\) u是v节点的祖先(u不等于v) 解题思路 这个可以找父节点权值满足小于或者等于\(\frac{k}{power[v]}\)(注意这里可能不能够整除) 我们从根节点出发,一个一个地遍历,...

weixin_30715523的博客 174

手把手教你学Simulink——基础电机控制场景实例:基于Simulink的永磁同步发电机温度场耦合仿真

摘要:本文详细介绍了基于Simulink的永磁同步发电机(PMSG)电-热耦合仿真方法。通过Simscape Electrical搭建含热端口的PMSG模型,结合集总参数热网络(LPTN)实现损耗计算与温度反馈,分析了过载工况下温升对电阻和永磁体性能的影响。仿真结果表明:150%过载20秒会导致绕组温升132°C,电阻增加42%,磁链衰减10.5%。文章还提供了自然冷却与强迫风冷的对比数据,并建议通过多物理场耦合仿真预防实机过热问题。该方法可有效支撑高功率密度电机热设计,避免永磁体退磁风险。

MHD0815的博客 248

Weak Pair(树状数组+离散化)

Weak Pair http://acm.hdu.edu.cn/showproblem.php?pid=5877 Problem Description You are given a rooted tree of NNN nodes, labeled from 1 to NNN. To the ith node a non-negative value ai is assigned.A...

Dyswan的博客 305

如何让C++程序生成dump文件?生成dump文件的方式有哪些?如何使用Windbg分析dump文件?

本文详细介绍了如何让C++程序生成dump文件、生成dump文件的多种方式以及如何使用Windbg分析dump文件,并给出了对应的实战分析案例,有一定的实战参考价值。

dvlinker的技术专栏 5万+

RK3568平台开发系列讲解(UBOOT篇)u-boot启动流程

U-Boot(Universal Bootloader)是一种开源的引导加载程序,广泛用于嵌入式系统中。它的主要功能是初始化硬件设备,加载操作系统内核,并将控制权交给操作系统。U-Boot的启动流程可以分为多个阶段,以下是典型的U-Boot启动流程:

内核笔记 1232

Weak Pair 离散化 + 树状数组

传送门 题目描述 在一棵有根树上求出有多少个点对(u,v),满足 u是v的祖先且a[u]*a[v] ≤k. 分析 光光跟我说这道题可以用主席树直接秒掉,但是由于我不会主席树,所以只能用一种十分麻烦的做法去处理(下次一定学) 我们可以将所有的权值存入vector里面,排序去重,然后用map进行定位,然后去dfs这棵树,每到达一个节点,去二分查找符合当前条件的最大权值是在vector中的位置,然后用树状数组去求和,然后将这个点的权值的位置的地方+1,dfs下一个节点,回溯的时候 -1即可 代码 #pragma

tlyzxc的博客 191

ESP32与BH1750光照传感器结合使用的Web服务器案例

请注意,为了使代码正常工作,你需要将代码中的"你的WiFi网络名称"和"你的WiFi网络密码"替换为你自己的WiFi网络凭据。在代码中,我们首先导入了所需的库文件,包括Wire库用于I2C通信,BH1750库用于与光照传感器通信,WiFi库和WebServer库用于创建Web服务器。接下来,我们将编写一个Arduino代码来控制ESP32与BH1750的通信,并将读取到的光照强度值显示在Web服务器上。函数用于处理根路径的请求,其中我们读取光照传感器的值,并将其显示在返回的HTML页面中。

server_api196的博客 617

HDU 5877 Weak Pair(离散化+dfs+树状数组)——2016 ACM/ICPC Asia Regional Dalian Online

HDU 5877 Weak Pair(离散化+dfs+树状数组)——2016 ACM/ICPC Asia Regional Dalian Online

queuelovestack的专栏 2485

Unity小游戏接入抖音敏感词检测

摘要: 本文介绍了Unity小游戏接入抖音敏感词检测的方法。抖音官方提供了两种API:SensitiveWordCheck用于检测敏感词,ReplaceSensitiveWords用于替换敏感词。此外,若使用键盘输入事件,可通过tt.onKeyboardComplete监听回调,平台会自动屏蔽敏感词(替换为*)。接入官方字库可有效避免审核驳回,适用于小游戏中的用户输入功能(如起名系统)。附官方文档链接及参数说明。

类人_猿的博客 4592

Android11原生设置屏幕亮由Gamma变化改为线性变化

从Android9 开始屏幕亮度调解变成非线性变化,这样的话就会出现 之前亮度变化很小,到后面时变化亮度很快; 修改为线性变化,只需要修改 ./frameworks/base/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache L

Android 4923

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

Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 3952    Accepted Submission(s): 1179 Problem Description You are given

K键盘里的青春K 698

从工具选型到落地实践:吃透 SAP Fiori Launchpad 配置工具体系

摘要: SAP Fiori Launchpad配置远非简单添加应用和分配角色,涉及技术目录、业务目录、Spaces/Pages等多层管理。官方推荐新工具分工:技术目录用FLPAM维护应用定义,业务目录用FLPCM编排应用组合,Spaces/Pages优化用户体验布局,而传统Groups模式已被标记弃用。这种分层治理模式(定义层-编排层-展示层)能有效解决传输混乱、升级兼容性问题,尤其适合大规模项目实施。关键在于区分技术配置与业务呈现,避免将所有功能堆砌在单一旧工具中。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 103

HDU 5877 Weak Pair 【dfs】【树状数组】【离散化】

Weak Pair Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 5985Accepted Submission(s): 1683 Problem Description You are given aroote...

pxlsdz的博客 298

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HDU5877 Weak Pair(树状数组+dfs)

Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1161    Accepted Submission(s): 392 Problem Description You are given a r

KeyboardPianist的博客 556

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

题目链接:Weak Pair 题意:   给出一颗有根树,如果有一对u,v,如果满足u是v的父节点且vec[u]×vec[v]<=k,则称这对结点是虚弱的,问这棵树中有几对虚弱的结点。 题解:   刚开始看到这题,无脑暴力dfs从叶子结点向上递归,TLE了一发神清气爽@。@!所以用树状数组优化dfs,从根节点向下递归,在结点x找所有满足<=k/vec[x]的点的个数。...

133

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

HDU 5877 Weak Pair (树状数组+DFS)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877 #include&lt;bits/stdc++.h&gt; using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)&lt;(z);(x)++) #define ll lon...

满月照亮的路 168

HDU 5877 Weak Pair dfs+树状数组

Weak Pair Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 5280Accepted Submission(s): 1...

点滴 274

HDU 5877 Weak Pair 树状数组 + DFS

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877题意: 求有序对个数(i,j)满足: i是j的祖先节点,且ai * aj <= k 代码://#include <bits/stdc++.h> #include <algorithm> #include <cstdio> #define sf scanf #define pf printf us

SolarDomo的博客 347

HDU5877 Weak Pair dfs + 线段树/树状数组 + 离散化

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877 题解: ………… 树状数组: #include//hdu5877 树状数组 map离散 dfs #include #include #include #include #include #include #define LL long long #define I

A man can be destroyed, but not defeated. 527

hdu5877 Weak Pair(离散化+树状数组+dfs)

题目链接:点这里!!! 题意: 给你一颗n个节点的有根树,问你有多少au*av 数据范围:n 题解: 我们对所有的ai,k/ai离散化,然后dfs这颗树,开始遍历x这个节点的时候询问当前有多少数小于等于k/a[x]然后加入到答案里,然后将a[x]加入到树状数组里,dfs完x时,将a[x]从树状数组里删除!! 我们发现我们每次询问的都是x节点的祖先,就ok了!

Zsss的博客 344

hdu 5877 Weak Pair dfs + 线段树(or树状数组)

// hdu 5877 Weak Pair dfs + 线段树(or树状数组) // // 题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5877 // // 题目大意: // n个节点到有根树,u是v的祖先,每个节点有个权值a[u].求 // a[u] * a[v] <= k的有序对的数量。 // // 解答: //

TIMELIMITE的专栏 797

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

题目链接:点击查看 题目大意:给定一个n个节点的树,每个节点都有权值,现在定义weak pair(u,v)需要满足的两个条件: u是v的祖先; ; 问给定的树中有多少个weak pair; 题目分析:我们可以将问题转化一下,要求,可以两边同除,得到,即用dfs序从根节点跑一边树,记录截止到任意子节点为止,之前有多少个小于等于的父节点即可,用树状数组或线段树维护数量就行,这里偷个懒用树状数组...

Falcon的博客 510

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

You are given a rootedrooted tree of NN nodes, labeled from 1 to NN . To the ii th node a non-negative value aiai is assigned.An orderedordered pair of nodes (u,v)(u,v) is said to be weakweak if ...

PCCCCC的博客 229

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

题目链接题意给定一棵树,点上有权值。问多少对点 (u,v)(u,v) 满足 uu 是 vv 的祖先 且 val[u]∗val[v]≤kval[u]*val[v]\leq k.思路类似dfs序 题目小集-hdu 3887注意点 因为 k≤1e18,val≤1e9k\leq 1e18, val\leq 1e9,所以需离散化,离散化的时候可以将 val[i]val[i] 及 k/val[i]k/val[i

kkkkahlua的博客 378

HDU5877 - Weak Pair 树状数组+离散化+DFS序

思路来源于某个大佬,昨天看的,今天找不到那篇了。。。就不附链接了。。。 题意:给你一棵树,每个结点都有一个值a[i],询问你有没有这样的成对结点(u,v),使得: 1、u是v的父结点(或父结点的父结点或父节点的父结点的父结点……),且a!=b。 2、u的值与v的值相乘小于等于题目所给的k(即a[u]*a[v]<=k)。 思路:看完题意,相信大家和我一样,一头雾水,二脸懵逼,无从下手。但是我们...

枚举星星 302
上一篇: Sparse Graph HDU - 5876(求补图最短路BFS)
下一篇: Different GCD Subarray Query HDU - 5869(gcd性质+树状数组+离线查询)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值