[ZJOI2008]树的统计Count

告别瞎猜!用通达信/同花顺这些资金流向函数,一眼看穿主力动向(附实战公式) 本文详细解析了通达信/同花顺资金流向函数的实战应用,帮助投资者精准识别主力动向。通过12个核心资金函数的组合逻辑,构建主力行为监控体系,避免未来函数陷阱,识别主力对倒行为,并提前捕捉异动。适合股票投资者提升自选股分析能力。 阅读详情

题目大意:

给出一棵树,点上有点权

有两种询问,询问两点之间树链上的点权和,询问两点之间树链上最大点权

点数<=30000,询问树<=200000


最裸的动态树,操作少,维护的值简单


//Lib
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<ctime>
 
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
using namespace std;
//Macro
#define rep(i,a,b) for(int i=a,tt=b;i<=tt;++i)
#define rrep(i,a,b) for(int i=a,tt=b;i>=tt;--i)
#define erep(i,e,x) for(int i=x;i;i=e[i].next)
#define irep(i,x) for(__typedef(x.begin()) i=x.begin();i!=x.end();i++)
#define read() (strtol(ipos,&ipos,10))
#define sqr(x) ((x)*(x))
#define pb push_back
#define PS system("pause");
typedef long long ll;
typedef pair<int,int> pii;
const int oo=100000000;
const double inf=1e20;
const double eps=1e-6;
string name="",in=".in",out=".out";
//Var
struct E
{
    int next,node;
}e[60008];
struct T
{
    int LC,RC,KEY,SUM,MAX,FA;
    #define lc(x) tree[x].LC
    #define rc(x) tree[x].RC
    #define key(x) tree[x].KEY
    #define sum(x) tree[x].SUM
    #define Max(x) tree[x].MAX
    #define fa(x) tree[x].FA
}tree[30008];
int tot,n,Q,w[30008],h[30008];
bool vis[30008];
void add(int a,int b){e[++tot].next=h[a];e[tot].node=b;h[a]=tot;}
bool isRoot(int x){return (lc(fa(x))!=x)&&(rc(fa(x))!=x);}
void Update(int x)
{
    sum(x)=sum(lc(x))+sum(rc(x))+key(x);
    Max(x)=max(max(Max(lc(x)),Max(rc(x))),key(x));
}
void Zig(int x)
{
    int y=fa(x),z=fa(y);
    if(lc(z)==y)lc(z)=x;else if(rc(z)==y)rc(z)=x;
    fa(x)=z;fa(rc(x))=y;lc(y)=rc(x);rc(x)=y;fa(y)=x;
    Update(y);
}
void Zag(int x)
{
    int y=fa(x),z=fa(y);
    if(lc(z)==y)lc(z)=x;else if(rc(z)==y) rc(z)=x;
    fa(x)=z;fa(lc(x))=y;rc(y)=lc(x);lc(x)=y;fa(y)=x;
    Update(y);
}
void Splay(int x) {
    int y , z;
    while (!isRoot(x)) {
        y = fa(x); z = fa(y);
        if (isRoot(y))
            if (x == lc(y)) Zig(x);
            else Zag(x);
        else
            if (y == lc(z))
                if (x == lc(y)) Zig(y) , Zig(x);
                else Zag(x) , Zig(x);
            else
                if (x == lc(y)) Zig(x) , Zag(x);
                else Zag(y) , Zag(x);
    }
    Update(x);
}
void DFS(int u,int f)
{
    key(u)=w[u];
    erep(i,e,h[u])if(e[i].node!=f)
        DFS(e[i].node,u),fa(e[i].node)=u;
}
void Init()
{
    int a,b;
    scanf("%d",&n);
    rep(i,1,n-1)
    {
        scanf("%d%d",&a,&b);
        add(a,b);add(b,a);
    }
    rep(i,1,n)scanf("%d",w+i);
    key(0)=Max(0)=-oo;
    DFS(1,0);
}
void Expose(int x)
{
    int y;
    for(y=0;x;x=fa(x)){Splay(x);rc(x)=y;Update(x);y=x;}
}
void Change(int x,int y)
{
    key(x)=y;Splay(x);
}
int Qmax(int x,int y)
{
    Expose(y);
    for(y=0;x;x=fa(x))
    {
        Splay(x);
        if(!fa(x))return max(key(x),max(Max(rc(x)),Max(y)));
        rc(x)=y;Update(x);y=x;
    }
}
int Qsum(int x,int y)
{
    Expose(y);
    for(y=0;x;x=fa(x))
    {
        Splay(x);
        if(!fa(x))return sum(rc(x))+key(x)+sum(y);
        rc(x)=y;Update(x);y=x;
    }
}
void Work()
{
    char ch[10];int a,b;
    scanf("%d",&Q);
    rep(i,1,Q)
    {
        scanf("%s%d%d",ch,&a,&b);
        if(ch[0]=='C')Change(a,b);
        else
        {
            if(ch[1]=='M')printf("%d\n",Qmax(a,b));
            else printf("%d\n",Qsum(a,b));
        }
    }
}
int main()
{
    //freopen((name+in).c_str(),"r",stdin);
    //freopen((name+out).c_str(),"w",stdout);
    Init();
    Work();
    return 0;
}


oracle合并行---解决listagg 拼接字段返回过长 (Ora-01489 result of String concatenation is too long) 阅读详情

相关推荐

Polars简明基础教程一:Polars快速入门

在这个例子中,我们将添加一个列,其中包含每个舱位中乘客的最大年龄。在Python中(而不是特指Polars),当我们将代码包裹在括号中时,我们可以在新行上调用一个新方法——在这种情况下是select。在这里,我们看到一个使用表达式API的简单示例,其中我们在select语句中选择Pclass、Name和Age列(我们将在第3节中深入了解select语句)。表达式是一个函数,它接受一个Series(或DataFrame中的列)作为输入,并返回一个Series(或DataFrame中的列)。

sosogod的博客 3878

树的计数

题目: 1.树的计数 【问题描述】 图和树有很密切的关系。某一天牙神产生了一个很奇怪的想法:删去一些边把一个无向图变成一个树,也就是将边留下N−1条。而且对于任意一个点i,要保证现在树中的边满足1号点到i号点的路径长度等于原图中1号点到i号点的最短路长度。牙神请你帮忙数一下有多少个目标树满足要求。答案对1000000007取模。 【输入格式】 第一行...

a5199519的博客 238

Android功耗系列专题理论之十三:MTK平台待机功耗问题分析方法

摘要:本文详细分析了MTK平台待机功耗问题的调试方法,重点介绍了SPM电源管理机制、26M时钟控制逻辑以及系统深睡眠状态的判断标准。文章提供了完整的Debug流程,包括日志抓取、唤醒源分析、SCP睡眠状态检查以及时钟/LDO状态排查等实用技巧,并给出硬件漏电点和软件配置异常的排查方案。针对不同模块(Modem/Conn/SSPM等)提供了具体的电源管理绕过命令,适用于功耗问题调试和低功耗模式验证场景。

559

【NOI2013】树的计数

#122. 【NOI2013】树的计数 统计 描述 提交 自定义测试 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的 DFS 序以及 BFS 序。两棵不同的树的 DFS 序有可能相同,并且它们的 BFS 序也有可能相同,例如下面两棵树的 DFS 序都是 1 2 4 5 3,BFS 序都是 1 2 3 4 5。 ...

weixin_34358365的博客 210

YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如今各种网络模型更新迭代越来越快,计算机视觉相关的文章也越来越多,多到一些普通,通用的改进点无法达到发表的要求。本专栏正是解决这个问题!如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 6万+

【反蒸馏实战 00】AI抢不走的工作:一份针对30个“高危”职位的“反取代”实战手册(反蒸馏计划启动)

AI时代职场生存指南:30个技术岗位的“反蒸馏”实战策略 随着AI技术快速发展,职场正面临前所未有的结构性重构。本系列专栏聚焦30个技术岗位,深入分析AI对各职位的影响路径,并提供系统性的"反蒸馏"策略。通过5层分析框架(AI冲击现状、核心价值解构、AI天花板、能力升级路径、人机协作模式),帮助从业者识别可替代任务与核心价值,建立不可替代的专业优势。内容涵盖IT开发、数据分析、产品管理等技术领域,为职场人提供从“被AI替代”到“与AI协同”的转型路线图,守护职业价值。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1650

[ZJOI2008]树的统计Count - 树链剖分

1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MB Submit: 25368 Solved: 10236 [Submit][Status][Discuss] Description   一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHAN...

青烟绕指柔的博客 460

RT-DETR 模型剪枝优化:结构化剪枝对 R18/R50 性能的影响

本文提出分层结构化剪枝策略R18:参数量减少 42%(28M→16.2M),推理速度提升 35%(15→20.3 FPS@Jetson Nano),mAP@0.5 仅降 1.2%;R50:参数量减少 55%(170M→76.5M),推理速度提升 48%(42→62.2 FPS@T4),mAP@0.5 仅降 2.1%。核心价值:为 RT-DETR 提供“精度-效率-部署”平衡的轻量化方案,推动其在边缘设备、工业质检等场景的大规模落地。部署建议。

走向CTO的路上... 464

bzoj 1036: [ZJOI2008]树的统计Count

1036: [ZJOI2008]树的统计Count Time Limit:10 SecMemory Limit:162 MBSubmit:5442Solved:2285[Submit][Status] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u...

alex151194310的博客 154

Open3D 点云变换【2025最新版】

点云平移、旋转、缩放、欧式变换的python代码实现。博客长期更新,本文最近更新时间为:2025年1月16日。

点云侠的博客 37万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

1036: [ZJOI2008]树的统计Count

1036: [ZJOI2008]树的统计Count Time Limit:10 SecMemory Limit:162 MBSubmit:7496Solved:3078[Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I....

98

VC中sqlite的使用

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

bzoj 1036 //1036: [ZJOI2008]树的统计Count 树链剖分

bzoj 1036 //1036: [ZJOI2008]树的统计Count 树链剖分 bzoj 1036 //1036: [ZJOI2008]树的统计Count //在线测评地址https://www.lydsy.com/JudgeOnline/problem.php?id=1036 更多题解,详见https://blog.youkuaiyun.com/mrcrack/article/de...

mrcrack的博客 282

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

BZOJ - 1036 [ZJOI2008]树的统计Count 树链剖分入门

[ZJOI2008]树的统计Count escription   一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从...

diangan7073的博客 135

bzoj1036: [ZJOI2008]树的统计Count

题面在这里 树链裸题。。直接上代码qwq /************************************************************* Problem: bzoj 1036 [ZJOI2008]树的统计Count User: fengyuan Language: C++ Result: Accepted Time: 2388 ms Mem

juruo? juruo! 345

BZOJ 1036: [ZJOI2008]树的统计Count【树链剖分】

1036: [ZJOI2008]树的统计Count 【题目描述】 传送门 【题解】 裸的树链剖分。 代码如下 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 30005 u...

weixin_30496431的博客 71

BZOJ 1036: [ZJOI2008]树的统计Count

二次联通门 :BZOJ 1036: [ZJOI2008]树的统计Count /* BZOJ 1036: [ZJOI2008]树的统计Count 树链剖分板子题 */ #include <cstdio> #include <iostream> #define rg register #define Max ...

weixin_30394633的博客 110

bzoj1036 [ZJOI2008]树的统计Count

1036: [ZJOI2008]树的统计Count Time Limit: 10 SecMemory Limit: 162 MBSubmit: 19800Solved: 8055[Submit][Status][Discuss] Description   一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成 一些操...

weixin_30715523的博客 73

【BZOJ 1036】[ZJOI2008]树的统计Count

【BZOJ 1036】[ZJOI2008]树的统计Count 树链剖分模板题~

Regina8023 950

[BZOJ1036][ZJOI2008]树的统计Count 解题报告|树链剖分

树链剖分  简单来说就是数据结构在树上的应用。常用的为线段树splay等。(可现在splay还不会敲囧)   重链剖分:     将树上的边分成轻链和重链。     重边为每个节点到它子树最大的儿子的边,其余为轻边。     设(u,v)为轻边,则size(v)<=size(u)/2 (一旦大于了那必然是重边)     也就是一条路径上每增加一条轻边节点个数就会减少一半以...

weixin_30700977的博客 136

bzoj1036【ZJOI2008】树的统计Count

树链剖分第一题

AaronPolaris 1646
上一篇: SGU116
下一篇: [SDOI2011]染色
OrpineX
博客等级 码龄17年 16粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值