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

发票OFD格式转换成PDF

发票OFD格式转换成PDF

Be_insighted的博客 931

告别Mac自带终端:iTerm2 + Oh My Zsh 保姆级配置指南(含国内镜像源)

本文提供了一份详细的Mac终端优化指南,涵盖iTerm2、Oh My Zsh和Homebrew的配置流程,特别针对国内用户提供镜像源解决方案。通过安装现代化工具链和优化配置,帮助开发者打造高效、美观的终端工作环境,提升日常开发效率。

weixin_42638178的博客 397

LCA+树状数组 POJ 2763 Housewife Wind

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

weixin_34221036的博客 112

多目标优化NSGA-II(快速精英非支配排序遗传算法)及python实现

文章目录前言一、什么是NSGA-II?二、学习NSGA-II1.快速非支配排序算法2.密度估计3.拥挤比较算子4.主循环5.代码6.总结 前言 NSGA-II适用于复杂的多目标优化问题,是K-Deb教授在2000年在一篇paper《MOEAs — A fast and elitist multi-objective genetic algorithm: nsga2》提出。 Keywords: optimization; multi-objective evolutionary algorithm; no

ricky_blog 9745

LCA学习

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

Miracle_ma的专栏 630

MediaPipe实战:从零构建人脸关键点检测应用

本文详细介绍了如何使用Google的MediaPipe框架从零构建一个实时人脸关键点检测应用。文章深入剖析了MediaPipe的三段式检测流水线,提供了Android平台的完整实战教程,包括环境配置、模型加载、摄像头集成、关键点绘制以及性能调优指南,帮助开发者快速实现高效、跨平台的人脸AR特效与交互功能。

weixin_29100927的博客 341

Linux-ftrace-双nop机制的实现

linux-ftrace内核追踪-双nop机制的实现原理

qq_43707773的博客 1072

【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

Kubernetes多网卡环境下Calico网络配置避坑指南:如何精准指定业务网卡

本文针对Kubernetes多网卡环境下Calico网络配置的常见痛点,提供了精准指定业务网卡的实战指南。通过深入分析Calico的IP自动检测机制,详细解读并对比了五种IP_AUTODETECTION_METHOD配置方法(如interface、cidr、can-reach等),帮助运维人员从根源上解决网络分区和Pod通信失败问题,确保生产集群网络的稳定与可靠。

weixin_28835551的博客 730

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

手把手教你用分立元件搭建自举电路:解决高端MOS驱动难题

本文详细介绍了如何用分立元件搭建自举电路,解决高端MOS驱动中的栅源极电压不足问题。通过面包板实验,逐步讲解二极管、电容等关键元件的选型与电路搭建,提供波形调试和常见问题排查方法,帮助工程师提升开关电源和电机驱动等应用的效率与可靠性。

weixin_30555125的博客 153

【实验】ENSP 实战:酒店有线 + 无线三层组网全配置(VLAN 规划 + AC/AP+SSID 绑定)

三层架构:出口路由器 → 核心交换机 → 汇聚交换机 → 接入交换机 / AP / 终端。

jundao1997的专栏 431

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

VC中sqlite的使用

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

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

假人有限元模型

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

挑战程序竞赛系列(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、付费专栏及课程。

余额充值