HDU-6393 Traffic Network in Numazu
题意:给你一个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的更多相关文章
- HDU - 6393 Traffic Network in Numazu(树链剖分+基环树)
http://acm.hdu.edu.cn/showproblem.php?pid=6393 题意 给n个点和n条边的图,有两种操作,一种修改边权,另一种查询u到v的最短路. 分析 n个点和n条边,实 ...
- hdu 6393 Traffic Network in Numazu (树链剖分+线段树 基环树)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6393 思路:n个点,n条边,也就是基环树..因为只有一个环,我们可以把这个环断开,建一个新的点n+1与之相 ...
- HDU - 6393 Traffic Network in Numazu (LCA+RMQ+树状数组)
这道题相当于将这两题结合: http://poj.org/problem?id=2763 http://codeforces.com/gym/101808/problem/K 题意:有N各点N条边的带 ...
- HDU - 6393 Traffic Network in Numazu (基环树+树链剖分/LCA)
题意:给定一个带权边无向基环树,有两种操作,一种是改变某个边的权值,另一种是询问两点间的最短路径. 可以对环进行缩点,以环为根建立一棵新树,并记录与环相连的所有点和环上的哪个点相连,将路径分为环外和环 ...
- Traffic Network in Numazu
Traffic Network in Numazu 题目描述 Chika is elected mayor of Numazu. She needs to manage the traffic in ...
- HDU contest808 ACM多校第7场 Problem - 1008: Traffic Network in Numazu
首先嘚瑟一下这场比赛的排名:59 (第一次看到这么多 √ emmmm) 好了进入正文QAQ ...这道题啊,思路很清晰啊. 首先你看到树上路径边权和,然后还带修改,不是显然可以想到 树剖+线段树 维护 ...
- hdu6393 Traffic Network in Numazu 树链剖分
题目传送门 题意:给出n个点n条边的无向带权图,再给出两种操作,操作1是将第x条边的边权修改为y,操作2是询问点x到点y的最短路径. 思路:如果是n个点n-1条边,题目就变成了树,修改边权和询问最短路 ...
- hdu6393Traffic Network in Numazu【树状数组】【LCA】
Traffic Network in Numazu Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (J ...
- 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 ...
随机推荐
- opencv-5-图像遍历与图像改变
opencv-5-图像遍历与图像改变 opencvc++qt 目录 目录 开始 图像的像素点访问与遍历 opencv 座标定义 下标访问 指针访问 迭代器法访问 遍历访问时间对比 图像操作 图像叠加 ...
- QT bug ig9icd64.dll
QT bug ig9icd64.dll bugintel ig9icd64.dll 处有未经处理的异常 遇到了一个 奇奇怪怪的bug, 一般的QT程序中 在main.cpp 中初始化一个窗口进行显示后 ...
- Vs Code中炫酷写代码插件Power Mode的安装配置
扩展栏搜索 Power Mode 安装 安装后重启vs code 文件->首选项->设置 搜索setting.json,点击在setting.json中编辑 打开之后在右侧用户设置里添加以 ...
- 浅谈 Objective-C Associated Objects
简介 Associated Objects 是 Objective-C 2.0 中 Runtime 的特性之一. 在 <objc/runtime.h> 中定义的三个方法, void obj ...
- C#模板编程(2): 编写C#预处理器,让模板来的再自然一点
在<C#模板编程(1):有了泛型,为什么还需要模板?>文中,指出了C#泛型的局限性,为了突破这个局限性,我们需要模板编程.但是,C#语法以及IDE均不支持C#模板编程,怎么办呢?自己动手, ...
- Clickhouse 字符串拆分 OR 一行转多行
Clickhouse 字符串拆分 OR 一行转多行 我想把 '123_456_142354_23543' 通过'_' 下划线进行拆分成
- CF1328B K-th Beautiful String
CF1328B K-th Beautiful String,然而CF今天却上不去了,这是洛谷的链接 题意 一个长度为\(n\)的字符串,有2个\(\texttt{b}\)和\(n-2\)个\(\tex ...
- muduo网络库源码学习————原子性操作Atomic.h
原子性操作可以做到比互斥锁更小的开销,在多线程编程中原子性操作是非常有用的.Atomic.h文件位于muduo/base下,代码如下: // Use of this source code is go ...
- Keepalived搭建LVS高可用性集群系统
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover ...
- mysql5.7 修改密码,修改权限
1.修改数据库对指定用户和ip权限 a. IP为192.168.0.1的用户jack拥有对数据库datebase的表table的 增删改查权限, ,连接密码为password grant select ...