洛谷 P3178 [HAOI2015]树上操作(树链剖分)

第5.1节 构网控制:电压源特性与电压调节 摘要: 构网型变流器的核心物理本质是作为可控交流电压源,通过戴维南等效模型(受控电势源+低输出阻抗)自主建立并调节电压,增强电网电压刚度。其电压调节通过无功-电压闭环控制实现,内环为自动电压调节器(AVR),外环为无功-电压下垂特性,模拟同步发电机功能。关键技术包括自适应增益、虚拟阻抗补偿及动态限流策略,以应对弱电网稳定性、故障过流等问题。该设计满足《规范》对电压调节范围、动态无功支撑的要求,是高比例新能源电力系统电压稳定的关键解决方案。 阅读详情

传送门


裸的树链剖分。。
不会的同学可以戳这。。


我觉得可以直接上代码。。
这次并没有动态开点。。
Code:

#include<cstdio>
#include<cstdlib>
#define ll long long

struct node{int y,next;}a[200010];
struct tree{int l,r,lc,rc;ll c,lz;}tr[200010];
int first[100010],dep[100010],tot[100010],son[100010],top[100010],fa[100010],image[100010],fact[100010],d[100010];
int n,m,len(0);

void ins(int x,int y){a[++len]=(node){y,first[x]};first[x]=len;}

void dfs_1(int x)
{
    tot[x]=1;
    for(int i=first[x];i;i=a[i].next)
    {
        int y=a[i].y;
        if(y!=fa[x])
        {
            fa[y]=x;
            dep[y]=dep[x]+1;
            dfs_1(y);
            if(tot[y]>tot[son[x]]) son[x]=y;
            tot[x]+=tot[y];
        }
    }
}

void dfs_2(int x,int tp)
{
    top[x]=tp;image[x]=++len;
    if(son[x]) dfs_2(son[x],tp);
    for(int i=first[x];i;i=a[i].next)
    {
        int y=a[i].y;
        if(y!=fa[x] && y!=son[x]) dfs_2(y,y);
    }
    fact[x]=len;
}

void bt(int l,int r)
{
    len++;int now=len;
    tr[now]=(tree){l,r,-1,-1,0,0};
    if(l<r)
    {
        int mid=(l+r)/2;
        tr[now].lc=len+1;bt(l,mid);
        tr[now].rc=len+1;bt(mid+1,r);
    }
}

void pushdown(int now)
{
    if(!tr[now].lz) return;
    int lc=tr[now].lc,rc=tr[now].rc;
    tr[lc].c+=(tr[lc].r-tr[lc].l+1)*tr[now].lz;
    tr[rc].c+=(tr[rc].r-tr[rc].l+1)*tr[now].lz;
    tr[lc].lz+=tr[now].lz;
    tr[rc].lz+=tr[now].lz;
    tr[now].lz=0;
}

void change(int now,int l,int r,ll c)
{
    if(tr[now].l==l && tr[now].r==r)
    {
        tr[now].c+=(r-l+1)*c;
        tr[now].lz+=c;
        return;
    }
    pushdown(now);
    int mid=(tr[now].l+tr[now].r)/2;
    int lc=tr[now].lc,rc=tr[now].rc;
    if(r<=mid) change(lc,l,r,c);
    else if(mid<l) change(rc,l,r,c);
    else
    {
        change(lc,l,mid,c);
        change(rc,mid+1,r,c);
    }
    tr[now].c=tr[lc].c+tr[rc].c;
}

ll findsum(int now,int l,int r)
{
    if(tr[now].l==l && tr[now].r==r) return tr[now].c;
    pushdown(now);
    int mid=(tr[now].l+tr[now].r)/2;
    int lc=tr[now].lc,rc=tr[now].rc;
    if(r<=mid) return findsum(lc,l,r);
    else if(mid<l) return findsum(rc,l,r);
    else return findsum(lc,l,mid)+findsum(rc,mid+1,r);
}

void solve(int x)
{
    int tx=top[x];
    ll ans=0;
    while(x!=0)
    {
        ans+=findsum(1,image[tx],image[x]);
        x=fa[tx];tx=top[x];
    }
    printf("%lld\n",ans);
}

int main()
{
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d",&d[i]);
    for(int i=1;i<n;i++)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        ins(x,y);ins(y,x);
    }
    dep[1]=1;fa[1]=0;dfs_1(1);
    len=0;dfs_2(1,1);
    len=0;bt(1,n);
    for(int i=1;i<=n;i++) change(1,image[i],image[i],d[i]);
    for(int i=1;i<=m;i++)
    {
        int p,x;ll c;
        scanf("%d %d",&p,&x);
        if(p==1 || p==2) scanf("%lld",&c);
        if(p==1) change(1,image[x],image[x],c);
        if(p==2) change(1,image[x],fact[x],c);
        if(p==3) solve(x);
    }
}
全功能tgbot/Telegram机器人多功能有后台版源码 trx兑换 闪兑 关键字监控 群管 usdt监控 余额查询 推广分享 等几乎常见的tg机器人功能都有。全功能tgbot/telegram机器人多功能有后台版源码-打包好的可以直接上手。 阅读详情

相关推荐

【processing】创意编程

首先接到这个作业的时候,我是很崩溃的,我是真的不会画画QAQ,还画自己,这也太难了,于是我决定!还是祸害我爱豆吧!于是我从微博太太那里找了个图临摹 下面是太太的图 先给太太道歉!都是为了作业! 然后我画出来是这样子的 还可以!!!没有特别丑!(虽然也不是特别像吧) 但是画这个真是画死我了,下面贴上代码吧,没啥特殊的就是各种贝塞尔曲线各种圆各种线 //face stroke(70,27,11...

qq_25700571的博客 1267

树上各种操作简单整理

树的定义: 树是一种数据结构,包含N个结点和N-1条边。树形结构的特点是一个数据元素可以有很多个直接后继,但只有一个直接前驱。而这里面最常见的就是二叉树。当树边的长度未给出时默认是1。 一般建图模板(链式前向星) int head[maxn]; struct edge { int to,next,l; }e[maxn*2]; void add(int x,int y,int l) { e[cnt].to=y; e[cnt].l=l; e[cnt].next=head[x];

qq_43734553的博客 647

Plot3d 网格数据格式

PLOT3D是一个计算机图形程序,旨在可视化计算流体力学的网格和解决方案。PLOT3D文件可以是ASCII, 也可是Fortran unformatted 或 C binary形式。PLOT3D文件分为网格文件(XYZ 文件), 空气动力学结果文件 (Q 文件)和通用结果文件(函数文件 + 函数名称文件)。网格文件中可加入所谓的IBlank参数。

weixin_62592231的博客 3721

树上操作-树上剖分

题目描述 有一棵点数为 的树,以点 为根,且树有点权。然后有 个操作,分为三种: 把某个节点 的点权增加 。 把某个节点 为根的子树中所有点的点权都增加 。 询问某个节点 到根的路径中所有点的点权和。 输入格式 第一行包含两个整数 。表示点数和操作数。 接下来一行 个整数,表示树中节点的初始权值。 接下来 行每行两个正整数 , 表示该树中存在一条边 。 再接下来 行,每行分别表示一次操作。其中第一个数表示该操作的种类(1-3) ,之后接这个操作的参数(x 或者 x a) 。 输出格

m0_56740685的博客 402

UReport2 报表设计器 在线表格

UReport2官网 一、UReport2报表设计器 UReport2是一个开源的可视化报表设计器,功能强大,操作简单,可以实现复杂的报表统计,有各种各样的导出和打印功能,支持导入Excel表格! 1、报表设计器 2、设计一个简单的用户列表展示 二、可编辑表格 扩展了layui的表格,支持多元化数据编辑(单选,多些、日期、下拉联动),开发简单、高效、便捷。有了它就可以轻松开发类似进销存系统的表格录入功能了,用户拿来即用! 三、主从表录......

ejinxian的专栏 2万+

EEGNet 网络代码解析与实战复现指南

本文详细解析了EEGNet这一轻量级卷积神经网络的结构与设计思想,重点阐述了其利用深度可分离卷积高效处理脑电信号的原理。文章提供了基于PyTorch的完整代码复现指南,包括网络搭建、数据模拟、训练调试及关键参数解析,旨在帮助读者掌握EEGNet的代码复现技巧,并将其应用于脑机接口等实际场景。

honey的博客 534

树上操作(边分治)

今天我们浅谈一下树上操作的边分治,首先我们要了解一下什么是边分治。 边分治是指在给定的一个图中,找到一条边,将这条边删去,使得删去这条边后分成的两个图的大小尽可能相等。 边分治和点分治所解决的问题基本上是相同的,但是基于边的分治只需要考虑两棵子树,所以设计算法更为简单。 ...

m0_58381738的博客 818

badusb详细制作教程(两种方式实现远控)

badusb是一种几乎可以突破任何杀毒软件和防火墙的设备,堪称渗透测试利器 文章目录前言一、什么是badusb?二,badusb的优点三,badusb是如何攻击的?badusb原理HID攻击漏洞产生原因三、准备步骤1.设备2,编辑器的安装与设置四,编写代码(重点)第一种: SEToolkit + badusb实现PowerShell注入攻击第二种:Cobalt Strike + badusb 实现PowerShell注入攻击五,烧录六,badusb有多强大攻击场景总结 BadUSB是《黑客军团》中

Ghost_system的博客 1万+

《P3178 [HAOI2015] 树上操作》

摘要 本文讨论了一个基于树的点权操作问题。给定一棵以点1为根的N个节点的树,每个节点具有初始权值。有M个操作分为三类:1)单点增加权值;2)子树所有节点增加权值;3)查询节点到根路径上的权值和。输入包括树结构和操作序列,要求输出所有查询操作的结果。 示例输入中,树有5个节点和5个操作,包括单点修改、子树修改和路径查询。输出展示了三个查询操作的结果分别为6、9和13。 该问题的数据规模为1≤N,M≤10^5,要求高效处理大规模数据。解决方案需要利用树结构特性,如DFS序和线段树等数据结构,才能满足时间复杂度的

Jasmine_llq的博客 802

芯片设计|SoC芯片设计流程 与 软硬件协同设计

SoC通常被称作系统级芯片或者片上系统,作为一个完整的系统,**其包含了硬件和软件两部分内容**。这里所说的硬件指SoC芯片部分,**软件是指运行在SoC芯片上的系统及应用程序**。既然它是由软件和硬件组合而成,则在进行系统设计时,**就必须同时从软件和硬件的角度去考虑。**

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1825

【大模型应用开发-大模型知识】(二)大模型分类和常见大模型

目前包含 Claude 和 Claude-Instant 两种模型可供选择,其中 Claude Instant 的延迟更低,性能略差,价格比完全体的 Claude-v1 要便宜,两个模型的上下文窗口都是 9000 个token(约 5000 个单词,或 15 页)它的目标是“更安全”、“危害更小”的人工智能。Google 还开发了多种 PaLM 的改进版本。更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。

1万+

[BZOJ4034]树上操作

有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。第一行包含两个整数 N M。表示点数和操作数。接下来一行 N 个整数,表示树中节点的初始权值。接下来 N-1 行每行三个正整数 fr to , 表示该树中存在一条边 (fr to)。再接下来 M 行,每行分别表示一次操作。

swowi的博客 425

14.建立时间、保持时间以及vivado时序report的参考使用

在设计数字系统时,需要仔细考虑电路元件的选择和布局以及时序设计来满足建立时间和保持时间的要求。建立时间,又称为建立时间窗口或建立期,是指数字信号在触发器的时钟信号前沿到来之前,必须已经稳定存在的时间。在本章节将结婚扫建立时间和保持时间的基本原理,以及如何通过vivado处理建立时间和保持时间。通过使用同步电路,可以更好地控制数据传输的时序并满足建立时间和保持时间的要求。例如,在D触发器中,选择具有适当充电和放电特性的D端口元件可以确保在时钟信号前沿到达前数据已经稳定存在,并在时钟信号前沿到达后保持稳定。

FPGA/MATLAB学习教程/源码/项目合作开发 2986

洛谷-P3178 [HAOI2015]树上操作(树链剖分)

题目链接:https://www.luogu.org/problemnew/show/P3178 题目大意:三种操作,按题目意思操作即可。 思路:树链剖分板子。单点修改,区间修改,区间查询。 ACCode: //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #inclu...

永远鲜红の幼月的博客 642

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

洛谷 P3178 [HAOI2015]树上操作

洛谷 P3178 [HAOI2015]树上操作 洛谷传送门 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 输入格式 第一行包含两个整数 N, M 。表示点数和操...

anhaoti3785的博客 214

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

洛谷 P3178 [HAOI2015]树上操作(树链剖分+树状数组)

P3178 [HAOI2015]树上操作 思路: 树链剖分+树状数组 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=100005; int son[N];//son[i]表示i的重儿子 int size[N];//size[i]表示i为根包含自己的字数节点个数 int f[N];//f[i]表示i的父亲 int dep[N];//dep[i]表示i的深度 vector<i

weixin_43970556的博客 170

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

树链剖分入门(洛谷 P3178 [HAOI2015]树上操作)

题目链接 发现一个神奇的现象: 数组开到1e5+5结果是mle和tle。绝望之时看了看题解,发现题解开到5e6都没事。我一怒之下开到1e6+5交了一发准备睡觉,结果。。。过了??wtf? 下面是ac代码: #include <iostream> #include <cstring> #include <string> #include <cmath>...

平凡人Kalzn的博客 704

P3178 [HAOI2015]树上操作(洛谷)【树链剖分+线段树模板】

P3178 [HAOI2015]树上操作(洛谷)【树链剖分+线段树模板】 思路 这题是一个树链剖分模板题,本来是参照秦淮岸灯火阑珊的博客树链剖分(轻重链剖分)算法笔记自己写一遍树链剖分并作为以后的板子,结果非常不幸纠结了一整天才搞完。原博客的代码有点乱,我一直以为自己错是因为有细节错误,结果找了很久发现原博客的代码有 #define int long long ……于是把所有的int全部换long long就过了…… 代码 #include <bits/stdc++.h> #define pb

tcy今天长胖了吗的博客 353

洛谷 P3178 [HAOI2015]树上操作 树链剖分

题目描述有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。输入输出格式输入格式: 第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,表示树中节点的初始权值。接下来 N-1

liangzihao1的博客 236

洛谷P3178 [HAOI2015]树上操作(树链剖分)

P3178 [HAOI2015]树上操作 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 输入输出格式 输入格式: 第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N ...

闲人请进 256

洛谷 P3178 [HAOI2015] 树上操作-提高+/省选-

有一棵点数为N的树,以点1为根,且树有点权。然后有M1xa2xa3x。

weixin_37253733的博客 1226

洛谷P3178 [HAOI2015]树上操作 树剖+线段树

洛谷P3178 [HAOI2015]树上操作 标签 树链剖分 简明题意 无 思路 裸的树剖,秒了啊啊啊啊啊!!! 注意事项 好吧,其实也没能一次过。总结下来,就是支持修改的数据结构,你得看他修改次数*修改范围会不会爆long long。然后,如果爆了long long,除了修改变量成long long,不要忘记返回值也要改成long long… 总结 如上 AC代...

danzh 175

洛谷3178 【HAOI2015】树上操作(树链剖分)

传送门 【题目分析】 树链剖分板题吧。 操作都很常规,单点加直接在线段树上修改,子树加就是将区间dfn[x]~dfn[x]+siz[x]-1内的所有值加key,最后路径求和即可。 注意开long long。 【代码~】 #include&lt;bits/stdc++.h&gt; using namespace std; typedef long long LL; const LL M...

Michael_GLF的博客 199

#树链剖分+线段树#[luogu P3178] [HAOI2015]树上操作

Title https://www.luogu.com.cn/problem/P3178 Code #include<cstdio> #define rr register #define ll long long using namespace std; const ll N=100011; const ll M=400011; ll n,m,Summ,R; ll seg[N],rev[M],size[N],son[N],top[N],dep[N]; ll num[N],fat

Nowed 227

[洛谷P3178] [HAOI2015]树上操作

题目链接: 点我 题目分析: 和树链剖分模板没什么区别,子树加就是直接在线段树上\(modify(1, num[u], num[u] + siz[u] - 1, d)\)即可(用dfs序的思想,且注意减掉\(u\)节点自己) 不多讲了,直接上代码吧。 代码: #include<bits/stdc++.h> #define int long long #define N (100000 ...

kma_093 127

洛谷-3178 [HAOI2015]树上操作

题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 输入格式 第一行包含两个整数 N, M 。表示点数和操作数。 接下来一行 N 个整数,表示树中节点的初始权值。 接下来 N-1...

mkopvec的博客 426
上一篇: 洛谷 P2590 [ZJOI2008]树的统计(树链剖分)
下一篇: 洛谷 P3834 可持久化线段树 1(主席树)
Dawn_LLLLLLL
博客等级 码龄9年 12粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值