POJ 2763 LCA+BIT

Picture of ssh key 立即下载

显然这个题是个好题, 
需要修改边利用,前缀和思想动态维护, 每次查询u到v的距离
记下每个点(u)第一次在dfs出现及最后回来的位置, strart和finish
那么u连向其父亲的边在被修改是影响的只是start【u】和finish【u】之间的范围前缀和恰好可以运用, 还有就是要做一个点到边映射数组, 其实很简单。。哦对了, 相信BIT–树状数组这么6的东西大家都懂吧。。
代码虽然长了, 但思路是很清晰的, 分了两个结构体来做

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

#define N 400010
#define map Map
#define next Next
#define begin Begin
#define C c = getchar()
#define mem(a, b) memset(a, b, sizeof(a))
#define rep(i, s, t) for(int i = s, end = t; i <= end; ++i)
#define erep(i, u) for(int i = begin[u]; i != -1; i = next[i])

bool vis[N];
int eid[N], map[N], dis[N], start[N], finish[N];
int e, cnt, tot, res, st, n, q;
int to[N], next[N], begin[N];
int dep[N], sum[N], dp[N][30], first[N], id[N], dist[N];

void read(int &x) {
    char C; x = 0; while(c<'0' || c>'9') C;
    while(c >= '0' && c <= '9') x = x*10 + c-'0', C;
}

struct BIT {
    int tree[N];
    int lowbit(int x) {
        return x & -x;
    }

    void update(int i, int x) {
        while(i <= n) {
            tree[i] += x;
            i += lowbit(i);
        }
    }

    int sum(int end) {
        int ans = 0;
        while(end > 0) {
            ans += tree[end];
            end -= lowbit(end);
        }
        return ans;
    }
}U;

struct sparse_table {
    void add(int u, int v, int i) {
        eid[++e] = i;
        to[e] = v;
        next[e] = begin[u];
        begin[u] = e;
    }

    void dfs(int u, int depth) {
        int v;
        id[++tot] = u; vis[u] = true;
        first[u] = tot; dep[tot] = depth;
        start[u] = ++cnt;
        erep(i, u)
            if(!vis[v = to[i]]) {
                map[eid[i]] = v;
                dfs(v, depth + 1);
                id[++tot] = u; dep[tot] = depth;
            }
        finish[u] = cnt;
    }

    void ST(int m) {
        rep(i, 1, m) dp[i][0] = i;

        for(int j = 1; (1<<j) <= m; ++j)
            for(int i = 1; i + (1<<j) - 1 <= m; ++i) {
                int a = dp[i][j-1], b = dp[i+(1<<(j-1))][j-1];
                dp[i][j] = dep[a] < dep[b]? a : b;
            }
    }

    int query(int l, int r) {
        int k = 0;
        while(1<<(k+1) <= r - l + 1) k++;
        int x = dp[l][k], y = dp[r - (1<<k) + 1][k];
        return dep[x] < dep[y]? x : y;
    }

    int LCA(int u, int v) {
        int x = first[u], y = first[v];
        if(x > y) swap(x, y);
        return id[query(x, y)];
    }
}T;

int main() {
#ifndef ONLINE_JUDGE
    freopen("data.in", "r", stdin);
    freopen("result.out", "w", stdout);
#endif
    mem(begin, -1);
    scanf("%d%d%d", &n, &q, &st);
    rep(i, 1, n-1) {
        int u, v, w;
//      scanf("%d%d%d", &u, &v, &w);
        read(u); read(v); read(w);
        dis[i] = w;
        T.add(u, v, i);
        T.add(v, u, i);
    }

    T.dfs(1, 1);
    T.ST(tot);
    rep(i, 1, n-1) 
        U.update(start[map[i]], dis[i]), U.update(finish[map[i]]+1, -dis[i]);
    rep(i, 1, q) {
        int t, u, w, xx;
//      scanf("%d", &t);
        read(t);
        if(!t) {
//          scanf("%d", &xx);
            read(xx);
            int lca = T.LCA(st, xx);
            printf("%d\n", U.sum(start[st]) + U.sum(start[xx]) - (U.sum(start[lca])<<1));
            st = xx;
        }
        else {
    //      scanf("%d%d", &u, &w);
            read(u); read(w);
            U.update(start[map[u]], w - dis[u]);
            U.update(finish[map[u]]+1, dis[u] - w);
            dis[u] = w;
        }
    }
    return 0;
}

好了, LCA的blog就告一段落了, 以后有好题再发

政府科技管理者如何提升区域科技成果转化项目的评价与筛选效率?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

高校技术转移办公室人员在成果转化过程中如何快速提升技术推介效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

poj 2763(RMQ+BIT\树链剖分)

传送门:Problem 2763 https://www.cnblogs.com/violet-acmer/p/9686774.html 题意:   一对夫妇居住在xx村庄,小屋之间有双向可达的道路,不会出现环,即所构成的图是个树,从ai小屋到bi小屋需要花费wi时间,一开始,女主角在s小屋,有两个询问,   ①0 u : 她又个孩子在u屋,需要妈妈接她回家,输出从s到u所需的最短时...

weixin_30243533的博客 167

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文档系统性地介绍了基于Simulink平台的两相交错并联Boost电路仿真模型,属于电力电子变换器建模与仿真研究的重要组成部分。该模型采用交错并联结构,有效提升了系统效率、降低了输出电流纹波,并具备优良的动态响应与系统稳定性。文档不仅聚焦于该特定拓扑的开环与闭环控制实现,还整合了丰富的配套资源,涵盖多种主流DC-DC变换器(如Buck、Boost、LLC、CLLC)、功率因数校正(PFC)电路、PWM整流器、双向充放电系统以及新能源应用场景(如V2G、微电网)等领域的仿真模型。资源体系强调软开关技术、多相交错控制、系统级建模与参数优化设计,所有内容均提供可运行的Simulink仿真文件,部分包含详细的设计报告、计算书及参考文献,具有较强的工程实践与科研复现价值。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的硕士博士研究生、高校科研人员,以及从事新能源发电、电动汽车、电源系统设计等领域的工程技术人员。; 使用场景及目标:①支撑高校电力电子与电力系统方向的科研项目,用于新型拓扑结构的建模与先进控制算法的验证;②服务于本科生与研究生的毕业设计、课程设计及高水平学术论文的仿真复现;③为企业在电源产品研发、新能源系统集成等环节提供成熟的仿真方案参考,缩短研发周期,降低试错成本。; 阅读建议:建议使用者首先访问文档末尾提供的完整资源目录链接,按需下载对应仿真模型;在实践过程中,应重点关注模型的参数配置、控制策略实现细节与仿真工况设置,结合配套的说明文档深入理解其工作原理与设计思路,推荐在MATLAB/Simulink环境中动手调试与二次开发,以充分掌握电力电子系统的核心技术。

poj2763 Housewife Wind 在线LCA+BIT

给一棵N个节点的边上带权树,给一个起点,接下来有M个操作,0 i:从当前位置走到i点,并且输出路径和;1 i w:把第i条边的权值变成w。整体上思路还是dis[x]+dis[y]-2*dis[lca(x,y)],但是更新时如果一条一条的去更新,显然会超时..这里可以结合dfs序和树状数组来实现更新和查询。首先dfs的时候给各个节点重新编号打上时间戳,这样每个节点的子树都会是一个连续的区间,那么某条

Broken Wings 823

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程

目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa

_Modest_的博客 1万+

告别Godot默认编辑器:手把手教你用VSCode配置C#开发环境(附中文注释避坑指南)

本文详细介绍了如何将VSCode配置为Godot引擎的C#开发环境,提升游戏开发效率。从环境准备、扩展配置到解决中文编码问题,提供完整的避坑指南和高级调试技巧,帮助开发者充分利用VSCode的智能补全和调试功能,打造高效工作流。

weixin_30596023的博客 189

LCA+树状数组 POJ 2763 Housewife Wind

题目传送门 题意:两种操作,问u到v的距离,并且u走到了v;把第i条边距离改成w 分析:根据DFS访问顺序,将树处理成链状的,那么回边处理成负权值,那么LCA加上BIT能够知道u到v的距离,BIT存储每条边的信息,这样第二种操作也能用BIT快速解决 利用RMQ的写法不知哪里写挫了,改用倍增法 /**************************************...

weixin_34221036的博客 112

保姆级教程:用再生龙Clonezilla Live给Ubuntu系统做全盘备份与恢复(含BIOS设置避坑)

本文提供了一份详细的Clonezilla Live教程,指导Ubuntu用户如何轻松完成全盘备份与恢复。从启动盘制作、BIOS设置避坑到备份参数解析和恢复操作,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效保护系统数据。

weixin_42116058的博客 640

LCA学习

今天学习了一发LCA算法 所谓LCA,就是最近公共祖先,lowest common ancestor 有O(n)的朴素算法,详见挑战程序设计竞赛 328页 LCA一般有两种解法,都是O(logn)复杂度的 1.基于二分搜索的算法 2.基于RMQ的算法 这些都是书上有的 所以用一个题目来解释把 POJ 2763 这题说实话还是有点难度的,因为找LCA的时候还要计算边权和,用二分搜索

Miracle_ma的专栏 630

基于YOLOv11的工业零件表面缺陷检测系统:从原理到实现

工业质量控制是制造业的核心环节,表面缺陷检测作为其中重要组成部分,直接关系到产品质量和企业效益。本文详细介绍了一种基于YOLOv11深度学习算法的工业零件表面缺陷检测系统,包含完整的算法原理分析、数据集构建方法、模型训练策略以及用户界面设计。通过大量实验验证,该系统能够高效准确地检测零件表面的划痕、凹陷、锈蚀等多种缺陷,检测精度达到96.2%,满足工业实时检测需求。本文还提供了完整的代码实现和详细的技术文档,为相关领域的研究者和工程师提供参考。关键词:表面缺陷检测;YOLOv11;深度学习;工业视觉;

YOLO 567

fast-lio系列改进版本

2.回环检测的优化结果,更新到FAST-LIO2的当前帧位姿中,幷进行ikdtree的重构,进而更新submap。其它的效果还不清楚,实测lio部分稳定性很好。用fast-lio_slam就很稳定。融合了fast-lio2和sc-pgo,两部分分开运行,SC-PGO从FAST-LIO2节点获取里程计和激光雷达点云主题。的作者kim在FAST-LIO2的基础上,添加SC-PGO模块,通过加入ScanContext全局描述子,进行回环修正,SC-PGO模块与FAST-LIO2解耦,非常方便,很优秀的工作。

z1872385的博客 3189

【POJ 2763】Housewife Wind【LCA】

题目链接:POJ-2763题目大意:一棵树,n个点,每条边有权值w[i],q个操作。 A:求u到v路径上权值之和 B:将第x条边的权值改为t (1<= n,q<= 10^5)题解先考虑图是一条链时,无论是查询还是修改,用BIT(树状数组)的话都可以在O(log n)内完成。 但是对于一棵树怎么搞呢?? 可以将树通过DFS访问的顶点顺序当做一条链。 这样就非常妙了,可以使用BIT做优化了。

cyclization的小栈 332

【ArcGIS微课1000例】0068:ArcGIS加载world imagery高清卫星影像教程

本文介绍了如何在ArcGIS中加载World Imagery高清卫星影像作为谷歌影像的替代方案。通过添加ArcGIS Server并输入在线图集URL(https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer),即可连接并预览包含中国影像、青海湖、东方明珠等全球高清卫星图。该教程提供了详细的操作步骤图示,帮助用户快速获取优质底图数据,适用于地理信息分析和可视化应用。

智慧空间实验室 5417

poj 2763 Housewife Wind(LCA经典题目 处理树链)

题目连接poj 2763 Housewife Wind 处理树上的边修改和查询两节点最近距离的操作.分析对于边查询,dis(u,v)=dis(root,u)+dis(root,u)−dis(root,lca(u,v))∗2dis(u,v) = dis (root, u)+dis(root,u) - dis(root,lca(u,v))*2 如果没有边修改,只需计算根到各个节点的距离,再计算lca

taotao 的大学墓志 676

手把手保姆级|Python爬取微信公众号文章完整版,反反爬策略拉满,附可运行完整代码(永久可用)

做Python爬虫的朋友都知道,爬取微信公众号文章 绝对是爬虫领域的「香饽饽」也是「硬骨头」。一方面,微信公众号的文章是极具价值的数据源:不管是自媒体从业者做竞品分析、新媒体运营者整理干货、还是个人学习收集资料,都需要批量爬取公众号文章;另一方面,微信的反爬机制堪称全网最严苛之一 ——腾讯对微信生态的风控做到了极致,动态渲染页面、高频IP封禁、Cookie短时效失效、请求头严格校验、自动化工具秒识别、频繁请求直接拉黑,这些反爬手段让90%的爬虫新手望而却步:要么爬了几篇就被封IP,要么Cookie失效爬取中

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2626

基于 STM32 单片机的实验室多参数安全监测系统设计与实现

本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安全。本文从硬件选型、电路设计到软件实现提供了完整的实验室安全监测系统方案,可根据实际需求调整传感器类型和通信方式,适用于科研、教学等场景的环境安全防护。:可增加继电器模块控制通风设备或切断电源,集成 ZigBee 组网实现多实验室联动监测。

weixin_42300449的博客 1285

POJ 2763 Housewife Wind(LCA)

题意: 给定N≤105的一棵树,Q≤105次询问,给定起始点s给定N\le 10^5的一棵树, Q\le 10^5次询问, 给定起始点s 0. u 从当前点s到u的距离0.\ u\ 从当前点s到u的距离 1. i w 将第i条边的权变为w1.\ i\ w\ 将第i条边的权变为w 分析: 动态求树上2点的距离,根据RMQ求LCA的办法,观察欧拉序列,发现一进一出动态求树上2点的距离

TaoSama's Microcosm 419

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

POJ 2763 Housewife Wind - LCA - 树状数组

传送门 题目大意:给定一棵树,支持修改边权和查询两点距离。 显然可以链剖去做。但是注意到dis(x,y)=dis(1,x)+dis(1,y)-2*(dis(1,LCA(x,y)))。 然后修改到x的边的边权等价于让x子树中的所有点的dis(1,y)+=c。 然后显然可以用BIT维护。 #include #include #include #include #define MAXN 1

Mys_C_K的博客 450

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

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

POJ 2763 Housewife Wind 两种解法

Housewife Wind Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 9637   Accepted: 2642 Description After their royal wedding, Jiajia and Wind hid away in XX Vi

I good vegetable a! 870

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

挑战程序竞赛系列(81):4.3 LCA(1)

挑战程序竞赛系列(81):4.3 LCA(1)传送门:POJ 2763: Housewife Wind题意: XX村里有n个小屋,小屋之间有双向可达的道路相连,所构成的图是一棵树。通过连接aia_i号小屋和bib_i号小屋的道路i需要花费wiw_i的时间。你一开始在s号小屋。请处理以下Q个查询。 A:输出从当前位置移动到结点x所需要的时间。 B:将通过道路x所需的时间改为t。 所需

Demon-初来驾到 623

挑战程序竞赛系列(82):4.3 LCA(2)

挑战程序竞赛系列(82):4.3 LCA(2)传送门:POJ 1986: Distance Queries题意: LCA距离:快速查询树中任意两个节点间的最短距离。 思路: 树中,每两个结点的路径是唯一的,比POJ: 2763简单,稍微改改就过了,思路一致,解题套路。代码如下:import java.io.BufferedReader; import java.io.File; import

Demon-初来驾到 647

POJ 2763 Housewife Wind(树链剖分+BIT)

Description 给你一棵树 2种操作0 x 求当前点s到x的最短路 然后当前的位置为x; 1 i x 将第i条边的权值置为x Input 第一行三个整数n,q和s表示点数,操作数和当前位置,之后n-1行每行三个整数a b c表示a,b之间有一条权值为c的边,最后q行每行一个操作 Output 对于每个查询,输出查询结果 Sample Input 3 3 1 1 2 1

ZSQ 1037

poj 2763 Housewife Wind

LCA+BIT,LCA用的是基于RMQ的方式实现的,RMQ又是采用传说中的稀疏表实现,也叫st方法 最核心的思想就是用dfs遍历一遍有根树,将遍历路径看做是一条链,这样就可以把树转化为链来做了,具体实现是运用了一个时间戳数组记录 ps:不知道是递归层数太多,还是vector太坑爹,g++会TLE,c++就AC了 #include #include #include #include #inc

452

poj 2763 Housewife Wind 动态求树上两点之间距离

题意: 给一棵n 分析: 首先用dfs将数序列化,然后用rmq求lca,用树状数组求树上两点之间的距离和更新边。  代码: //poj 2763 //sep9 #include #include using namespace std; const int MAXN=100024; const int LOG_MAXN=20; struct EDGE{ int idx,v,w,nx

sepNINE的专栏 714
上一篇: POJ 3728 tarjan+DP
下一篇: BSGS(baby step gaint step)+快速幂+exgcd逆元
__Galaxy
博客等级 码龄10年 8粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值