题意:给你一个n边n点的无向连通图,两个操作,操作一改变某个边的权值,操作二查询某两个点之间的路径长度。

题解:随便删掉环上一条边搞一棵树出来,因为两点间距离是两点各自到根的距离之和减去2*lca两点到根的距离。

所以修改操作就变为维护点到根这条链上的权值,差分一下 采用树状数组维护。

查询的时候就是用删掉那条边和不用两种情况,比较一下大小就好了。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
int E[N],dfn[N],F[N],L[N],R[N],deep[N],inv[N],f[N][],to[N<<],w[N<<],nxt[N<<],H[N];
int W,X,Y,n,T,m,Q,x,y,z,tar,tot,cnt;
long long C[N];
void add(int u,int v,int z){
to[tot]=v,w[tot]=z,nxt[tot]=H[u],H[u]=tot++;
}
void dfs(int u,int fa,int deepth){
dfn[u]=L[u]=++cnt;
deep[u]=deepth;
inv[cnt]=u;
for(int i=H[u];~i;i=nxt[i]){
int v=to[i];
if(v==fa) continue;
if(dfn[v]) {
tar=(i>>)+;
W=w[i];
X=u;
Y=v;
continue;
}
f[v][]=u;
F[v]=w[i];
E[(i>>)+]=v;
dfs(v,u,deepth+);
}
R[u]=cnt;
}
void modify(int u,int v){
for(;u<=n;u+=u&(-u)) C[u]+=v;
}
long long sum(int u){
long long ans=;
for(;u;u-=u&(-u)) ans+=C[u];
return ans;
}
void work(){
for(int i=;i<;++i) for(int j=;j<=n;++j) f[j][i]=f[f[j][i-]][i-];
}
int lca(int x,int y){
if(deep[x]<deep[y]) swap(x,y);
int dt=deep[x]-deep[y];
for(int i=;i<;++i) if(dt&(<<i)) x=f[x][i];
if(x==y) return x;
for(int i=;i>=;--i) if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
return f[x][];
}
long long dist(int x,int y){
return sum(dfn[x])+sum(dfn[y])-2LL*(sum(dfn[lca(x,y)]));
}
int main(){
for(scanf("%d",&T);T--;){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i) H[i]=-,dfn[i]=C[i]=;
tot=cnt=;
for(int i=;i<=n;++i){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
dfs(,,);
work();
for(int i=;i<=n;++i) {
modify(L[inv[i]],F[inv[i]]);
modify(R[inv[i]]+,-F[inv[i]]);
}
while(m--){
scanf("%d%d%d",&x,&y,&z);
if(x==) {
if(tar==y) W=z;
else {
int i=E[y];
modify(L[i],z-F[i]);
modify(R[i]+,-z+F[i]);
F[i]=z;
}
}
else {
long long ans=dist(y,z);
ans=min(ans,dist(y,X)+dist(z,Y)+W);
ans=min(ans,dist(z,X)+dist(y,Y)+W);
printf("%lld\n",ans);
}
}
}
}

HDU-6393 Traffic Network in Numazu的更多相关文章

  1. HDU - 6393 Traffic Network in Numazu(树链剖分+基环树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6393 题意 给n个点和n条边的图,有两种操作,一种修改边权,另一种查询u到v的最短路. 分析 n个点和n条边,实 ...

  2. hdu 6393 Traffic Network in Numazu (树链剖分+线段树 基环树)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6393 思路:n个点,n条边,也就是基环树..因为只有一个环,我们可以把这个环断开,建一个新的点n+1与之相 ...

  3. HDU - 6393 Traffic Network in Numazu (LCA+RMQ+树状数组)

    这道题相当于将这两题结合: http://poj.org/problem?id=2763 http://codeforces.com/gym/101808/problem/K 题意:有N各点N条边的带 ...

  4. HDU - 6393 Traffic Network in Numazu (基环树+树链剖分/LCA)

    题意:给定一个带权边无向基环树,有两种操作,一种是改变某个边的权值,另一种是询问两点间的最短路径. 可以对环进行缩点,以环为根建立一棵新树,并记录与环相连的所有点和环上的哪个点相连,将路径分为环外和环 ...

  5. Traffic Network in Numazu

    Traffic Network in Numazu 题目描述 Chika is elected mayor of Numazu. She needs to manage the traffic in ...

  6. HDU contest808 ACM多校第7场 Problem - 1008: Traffic Network in Numazu

    首先嘚瑟一下这场比赛的排名:59 (第一次看到这么多 √ emmmm) 好了进入正文QAQ ...这道题啊,思路很清晰啊. 首先你看到树上路径边权和,然后还带修改,不是显然可以想到 树剖+线段树 维护 ...

  7. hdu6393 Traffic Network in Numazu 树链剖分

    题目传送门 题意:给出n个点n条边的无向带权图,再给出两种操作,操作1是将第x条边的边权修改为y,操作2是询问点x到点y的最短路径. 思路:如果是n个点n-1条边,题目就变成了树,修改边权和询问最短路 ...

  8. hdu6393Traffic Network in Numazu【树状数组】【LCA】

    Traffic Network in Numazu Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (J ...

  9. Method for finding shortest path to destination in traffic network using Dijkstra algorithm or Floyd-warshall algorithm

    A method is presented for finding a shortest path from a starting place to a destination place in a ...

随机推荐

  1. C#多线程(16):手把手教你撸一个工作流

    目录 前言 节点 Then Parallel Schedule Delay 试用一下 顺序节点 并行任务 编写工作流 接口构建器 工作流构建器 依赖注入 实现工作流解析 前言 前面学习了很多多线程和任 ...

  2. 理解分布式一致性:Paxos协议之Multi-Paxos

    理解分布式一致性:Paxos协议之Multi-Paxos Multi-Paxos without failures Multi-Paxos when phase 1 can be skipped Mu ...

  3. 【集群实战】inotify

    1. inotify简介 Inotify是一种强大的,细粒度的,异步的文件系统事件监控机制(软件). linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加 ...

  4. mysql备份及恢复

    第四章:MySQL数据库的备份与恢复                            2016-09-30 00:58:05 标签:数据库备份 工作原理 数据库表 mysql source 原创 ...

  5. Vue Cli 3 搭建单页应用项目刷新 404 问题 解决方案(以Apache为例)

    vue 项目 版本 Vue Cli 3.3 官方文档 https://router.vuejs.org/zh/guide/essentials/history-mode.html 因为本项目部署在 A ...

  6. 百度Openrasp开源的应用运行时自我保护产品,安装教程。

    第一步: 下载最新版本的安装包 https://packages.baidu.com/app/openrasp/release/latest/rasp-php-linux.tar.bz2 解压到目录: ...

  7. 内存淘汰机制——LRU与LFU

    内存淘汰机制之LRU与LFU LRU(Least Recently Used):淘汰 近期最不会访问的数据 LFU(Least Frequently Used):淘汰 最不经常使用(访问次数少) 所谓 ...

  8. spring boot的核心注解

    1.@SpringBootApplication 是SpingBoot的启动类 此注解等同于@Configuration+@EnableAutoConfiguration+@ComponentScan ...

  9. 王颖奇 201771010129《面向对象程序设计(java)》第八周学习总结

    实验六 接口的定义与使用 实验时间 2018-10-18 1.实验目的与要求 (1) 掌握接口定义方法: (2) 掌握实现接口类的定义要求: (3) 掌握实现了接口类的使用要求: (4) 掌握程序回调 ...

  10. 王颖奇 201771010129《面向对象程序设计(java)》第四周学习总结

    实验四 类与对象的定义及使用 实验时间 2018-9-20 1.目的与要求 学习目标 掌握类与对象的基础概念,理解类与对象的关系: 掌握对象与对象变量的关系: 掌握预定义类的基本使用方法,熟悉Math ...