Weak Pair HDU - 5877

MacX DVD Ripper Pro for Mac(DVD解码器) 6.2.120190416免激活版 只需要5分钟即可转档一张DVD光碟!并允许我们在编码之前预览、编辑、裁剪、修剪或扩展视频。第一款也是唯一一款能够支持DVD到MP4,H.264,MOV,FLV,MPEG4等所有格式DVD(新DVD,99-标题DVD,损坏和无法播放的DVD)和翻录DVD / ISO映像的工具,AVI,QT,MP3等。借助350多种预设配置文件MacX DVD Ripper Pro for Mac(DVD解码器) 6... 阅读详情

You are given a rootedrooted tree of NN nodes, labeled from 1 to NN. To the iith node a non-negative value aiai is assigned.An orderedordered pair of nodes (u,v)(u,v) is said to be weakweak if
(1) uu is an ancestor of vv (Note: In this problem a node uu is not considered an ancestor of itself);
(2) au×av≤kau×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 TT denoting number of test cases.
For each case, the first line contains two space-separated integers, NN and kk, respectively.
The second line contains NN space-separated integers, denoting a1a1 to aNaN.
Each of the subsequent lines contains two space-separated integers defining an edge connecting nodes uu and vv , where node uu is the parent of node vv.

Constrains:

1≤N≤1051≤N≤105

0≤ai≤1090≤ai≤109

0≤k≤10180≤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

题意:让你求满足条件的有多少个点对。这题目感觉题意也写得不是很清楚啊。。。到底是满足任意一个还是都要满足2333。。。是我蠢么。。
条件是 u是v的父节点,然后 uv的权值乘积要小于一个定值k。。
思路:怎么保证u是v的父节点呢。那你走dfs,必定是从父节点走到儿子节点的。。所以在走dfs的时候更新查询靠谱。那对一个u怎么确定有多少v呢。首先 我们知道我们要的值必定是 k/w[u] ,如果v的值小于这个说明这个v是可以的,那我们可以把一个权值拆成本身w 和 k/w 组成一个新数组,之后根据大小关系离散化,这样就很明显是单点更新区间查询了,那我们就又要搞一搞树状数组了。然后我们再来讲讲上面那个u怎么确定有多少个v 这个思路是我一开始的思路,嗯。。。是错的2333(错的你还写??) 错在哪呢,。。你这样写你会发现你消除不了之前子树的影响。。也许能?能要不留个言?2333 但是你可以统计这个子节点之前有多少个u是满足的,这是个相对的关系嘛。。一样的,然后你每次先更新父节点然后dfs退栈之前消除影响

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<string>
#include<stack>
#include<map>
#include<set>
using namespace std;

//thanks to pyf ...

#define INF 0x3f3f3f3f
#define CLR(x,y) memset(x,y,sizeof(x))
#define mp(x,y) make_pair(x,y)
typedef pair<int, int> PII;
typedef long long ll;

const int N = 1e6 + 5;

struct Edge
{
    int u, v, next;
} edge[N];
int head[N];
int tot = 0;
int indeg[N];
ll BIT[N];
ll w[N];
ll opt_w[N * 2];
ll k;
ll ans = 0;
map<ll, int>m;
int n;
void init()
{
    CLR(indeg, 0);
    CLR(w, 0);
    CLR(opt_w, 0);
    CLR(BIT, 0);
    CLR(head, -1);
    m.clear();
    ans = 0;
    tot = 0;
}
int lowbit(int x)
{
    return x & (-x);
}
void update(int pos, ll val)
{
    while (pos <= 2 * n)
    {
        BIT[pos] += val;
        pos += lowbit(pos);
    }
}
ll query(int pos)
{
    ll res = 0;
    while (pos > 0)
    {
        res += BIT[pos];
        pos -= lowbit(pos);
    }
    return res;
}
void add_edge(int u, int v)
{
    edge[tot].u = u;
    edge[tot].v = v;
    edge[tot].next = head[u];
    head[u] = tot ++;
}
void dfs(int u)
{
    ans += query(m[k / w[u]]);
    update(m[w[u]], 1);
    for (int i = head[u]; i != -1; i = edge[i].next)
    {
        int v = edge[i].v ;
        //  cout << u << " " << v << " " << i << " " << edge[i].next << endl;
        dfs(v);
    }
    update(m[w[u]], - 1);
}
int main()
{
    int T;
    while (scanf("%d", &T) == 1)
    {
        while (T--)
        {
            init();
            scanf("%d%lld", &n, &k);
            for (int i = 1; i <= n; i++)
            {
                scanf("%lld", w + i);
                opt_w[i] = w[i];
                if (w[i] == 0)
                    opt_w[n + i] = INF;
                else
                    opt_w[n + i] = k / w[i];
            }
            for (int i = 1; i < n; i++)
            {
                int u, v;
                scanf("%d%d", &u, &v);
                indeg[v] ++ ;
                add_edge(u, v);
                //      add_edge(v, u);
            }
            sort(opt_w + 1, opt_w + 1 + n * 2);
            for (int i = 1; i <= n * 2; i++)
                m[opt_w[i]] = i;
            for (int i = 1; i <= n; i++)
                if (!indeg[i])
                    dfs(i);
            printf("%lld\n", ans);
        }
    }
}
09 SAP CPI 访问公共API接口 我在网上找了一个公共API,入参输入汉字返回拼音。至此,一个真正的访问API的接口就做好了。点击保存时可看到红叉报错。 阅读详情

相关推荐

SpringBoot实战——仿b站项目(一)

热部署就是当应用程序这种运行的时候升级冉家或者修改某一部分代码、配置文件时,无需手动启动应用,即可修改的部分生效工具 + IDEA配置。

weixin_52880572的博客 3455

/*已知一个排好序的数组,按数组原排序方式插入一个数据*/

/*已知一个排好序的数组,按数组原排序方式插入一个数据*/ std::vectorshuzu = {1,2,3,4,5,7,8,9}; int x = 0, caru = 6; std::vector::iterator iter; for (iter = shuzu.begin(); iter != shuzu.end(); iter++) { if (*iter > caru)b

浤济的专栏 2688

贴片二极管SOD封装详解:SOD-123/323/523尺寸焊盘设计要点

表面贴装技术中,二极管封装尺寸直接决定PCB布局与焊接可靠性。SOD封装作为小外形二极管的主流形态,其SOD-123、SOD-323、SOD-523三种规格分别对应不同的功耗与占板面积权衡。理解封装尺寸、焊盘设计计算逻辑和钢网开窗原理,是避免立碑、虚焊等工艺缺陷的关键。在可穿戴设备、电源保护等空间受限场景中,合理选择封装不仅能优化散热路径,还能提升量产良率。本文从焊盘计算、工艺要点到选型策略,全面解析SOD封装的工程实践。

weixin_42520780的博客 296

Weak Pair (dfs+树状数组)

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

weixin_30715523的博客 174

华为OD技术面八股文_C++_01

汇总华为OD技术面C++方向八股文真题,并提供详细解答。

qq_45776114的博客 1884

COMSOL介电弹性体数值仿真指南:预拉伸圆形DEA的稳态变形分析(II)

本期博客是《COMSOL介电弹性体数值仿真指南》系列博客中的一期。聚焦于介电弹性体驱动器(DEA)中最为经典的预拉伸圆形DEA驱动器构型,对其在COMSOL平台中的具体建模步骤进行介绍与讨论。

忘了面孔的Batou 353

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

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

Falcon的博客 510

实战复盘:纷玩岛(Livelab)候补订单微信支付协议的逆向与复现

通过本次对纷玩岛候补支付接口的分析,我们实现了一个脱离 App UI 的轻量级支付发起器。这不仅验证了其API的设计逻辑(Standby -> PrePayInfo 分层设计),也为后续的自动化监控或辅助抢票工具提供了支付环节的技术验证。技术本无罪,关键在于如何使用。理解这些底层协议,有助于我们写出更健壮的代码,也能在遇到线上支付问题时快速定位是业务层(API)问题还是通道层(微信)问题。

猫敷雪 795

Codeforces 932F - Escape Through Leaf

Problem Link: http://codeforces.com/contest/932/problem/F Problem Statement: F. Escape Through Leaf time limit per test: 3 seconds memory limit per test:256 megabytes ...

dik93117的博客 251

【深度学习新浪潮】气候预测模型的研发进展一览(2025年版)

模型类型核心优势适用场景不足ARIMA(统计模型)简单高效、可解释性强短期单变量预测非线性、长时依赖建模差随机森林(机器学习)多特征融合、抗噪声中短期多因素预测空间相关性、时序趋势捕捉弱LSTM(深度学习)长时依赖建模、端到端中长期时序预测物理一致性差、数据需求量大物理知情AI物理规律约束、高可靠性极端天气、长期气候变化模型复杂、计算成本高。

专注:太空算力、AI infra、异构调度、大模型成本工程 528

ROSTEA软件下载及情感分析详细操作教程(附网盘链接)

原ROST虚拟团队出品的ROST系列文本内容挖掘分析平台,是辅助人文社会科学研究的免费计算平台。该软件可以实现文本预处理、分字、分词、词性识别、特殊名词抽取、词频统计、英文词频统计、情感计算、分类算法、聚类算法等一系列文本挖掘,是人文社科研究和论文写作的一把利器。该软件用户量超过一万人,遍布海内外100多所大学,包括剑桥大学、日本北海道大学、北京大学、清华大学、香港城市大学、澳门大学等众多高校。关于ROSTCM6的安装介绍可以参考之前的文章ROSTCM6软件下载及语义网络分析详细操作教程ROST EA。

m0_64336780的博客 1万+

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

Coldfresh的博客 469

Python3+PCAN-USB基于PCAN-Basic二次开发实现上位机功能

一、环境搭建 1.概述 本文主要是通过Python3与CAN总线工具PCAN-USB基于官方PCAN-Basic库实现CAN总线消息读写功能。 2.PCANBasic.py和PCANBasic.dll下载地址 https://www.peak-system.com/fileadmin/media/files/pcan-basic.zip 3.Python安装 下载地址:https://www.p...

测试领域技术分享 5183

HDU 5877 Weak Pair(弱点对)

HDU5877WeakPair(弱点对) TimeLimit:4000/2000MS(Java/Others)MemoryLimit:262144/262144K(Java/Others) Description 题目描述 You are given a ro...

131

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

HDU5877 - Weak Pair

HDU5877 - Weak Pair 做法:dfs的时候,用树状数组维护当前节点到跟节点的权值树状数组,离散化一下即可,类似统计树上逆序对。此题数据范围好像是假的,节点数开到200000可过。 #include <bits/stdc++.h> #define pb push_back typedef long long ll; const int N = 2e5 + 7;...

dehukun0483的博客 155

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

HDU5877Weak Pair

Weak Pair                                 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)                                           Problem Description Y

cxhscst2 362

怀旧版电脑GBC模拟器

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

hdu 5877 Weak Pair (Treap)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877 题面; Weak Pair Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 5706Accepted Submission...

weixin_30906671的博客 126

HDU5877 Weak Pair

题目链接:HDU5877 Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 687    Accepted Submission(s): 236 Problem Description

teddywang 592

HDU 5877 Weak Pair

题意;求所有点的祖先节点中与他的权值的乘积小于k 的个数的和; 思路:我们在从祖先节点开始进行DFS, 当跑到该节点时,在线段树中查找比k/val[u] 小的权值的个数,并在线段树中该权值对应的点+1, 当回溯的时候该点权值的位置在-1。 由于权值的范围较大,可以先将权值离散化,或者直接建立一颗手动分配内存的线段树,如果离散化树状数组也可解,当然维护一个set也是可以的。 代码: #inc

moon_NO2015的博客 461

HDU 5877 Weak Pair (Treap+dfs)

http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意:告诉你一颗有根的树和一个k,结点分别为1到n,同时也给出了结点的权值a[i],然后给出了这颗树,输入两个结点u,v表示u是v父亲。最后告诉你一个关于弱对的定义,如果x是y的祖先,同时a[x]*a[y]<=k,则为一个弱对,问这颗树中有多少个弱对。 做法:直接dfs遍历这颗树,到了一个结点u...

KXL5180的博客 341

HDU-5877 Weak Pair

首先对所有的a[i],外加k/a[i]离散化 然后从根节点dfs,用树状数组维护路径上的数,对于经过的每个节点,查询小于等于k/a[i]的数的个数 全部加起来就是答案 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; #include&lt;cm...

wl16wzl的博客 202

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

hdu5877 Weak Pair

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

overload1997 568
上一篇: Friends and Enemies HDU - 5874
下一篇: Codeforces799C. Fountains
OneDay_pyf
博客等级 码龄10年 6粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值