Upd G

看上好模板的样子, 果然是个模板题 好题 , 首先考虑这张图的 \(Euler \ Tour\), 简单点说, 就是dfs一遍, 把每个点入栈出栈顺序存起来, 举个例子·

2
1 2
2 3

这棵树的 \(Euler \ Tour\) 就是1 2 3 3 2 1

相当于把树拍成序列, 之后在上面记录每个点到根的距离。

操作一 改变某条边权值为 \(w\) 相当于把这条边上入栈顺序相对靠后的点(son) 的值 改为 \(w\) , 这个操作可以用树状数组/线段树维护。

操作二 统计答案 树上节点 \(u \ v\) 的距离 \(\operatorname{dis}(u, v) =\operatorname{dis}(1, u) + \operatorname{dis}(1, v) - 2 \times \operatorname{dis}(1, lca(u, v))\)

所以找出 $u\ v $ 的 \(lca\) 统计即可

\(Code\)

vector<int> G[maxn];
//LCA
int p[maxn][21];
int dep[maxn];
int in[maxn], out[maxn];
int T = 0;
void dfs(int u, int fa, int depth) {
dep[u] = depth; p[u][0] = fa;
in[u] = ++T;
for (int i = 1; i <= 20; i++) p[u][i] = p[p[u][i - 1]][i - 1];
for (int i = 0; i < G[u].size(); i++) if (G[u][i] != fa) dfs(G[u][i], u, depth + 1);
out[u] = ++T;
}
int LCA(int x, int y) {
if (dep[x] < dep[y]) swap(x, y);
for (int i = 20; i >= 0; i--) if(dep[p[x][i]] >= dep[y]) x = p[x][i];
if (x == y) return x;
for (int i = 20; i >= 0; i--) if (p[x][i] != p[y][i]) x = p[x][i], y = p[y][i];
return p[x][0];
}
int lf[maxn], rf[maxn];
int c[maxn], we[maxn];
void add(int x, int y) {
for (int i = x; i <= T; i += i & (-i)) {
c[i] += y;
}
return;
}
int sum(int x) {
int res = 0;
for (int i = x; i; i -= i &-i) {
res += c[i];
}
return res;
}
signed main() {
cin >> n;
rep_(i, 1, n - 1) {
int u, v, w;
cin >> u >> v >> w;
G[u].pb(v);
G[v].pb(u);
lf[i] = u, rf[i] = v, we[i] = w;
}
dfs(1, 0, 1);
for (int i = 1; i <= n - 1; i++) {
if (in[lf[i]] > in[rf[i]]) swap(lf[i], rf[i]);
add(in[rf[i]], we[i]);
add(out[rf[i]], -we[i]);
}
int q;
cin >> q;
rep_(i, 1, q) {
int opt, x, y;
cin >> opt >> x >> y;
if (opt == 1) {
add(in[rf[x]], -we[x] + y);
add(out[rf[x]], we[x] - y);
we[x] = y;
} else {
cout << sum(in[x]) + sum(in[y]) - 2 * sum(in[LCA(x, y)]) << endl;
}
}

abc294G的更多相关文章

随机推荐

  1. Java代码结构

    Java代码结构 顺序结构 Java的基本结构为顺序结构,除非特别指明,否则从上到下一句一句执行 选择结构 if单选择结构 if(condition){ doSomething(); } if双选择结 ...

  2. IT工具知识-11:一种安卓投屏到Win10失败的解决方法

    软硬件平台 电脑:WIN10 LTSC 手机:红米K30Pro/MIUI 11.0.26 投屏软件:安卓端-自带投屏,WIN10-自带投屏(连接) 故障描述 之前还能用的,但是在换了个路由器之后就不能 ...

  3. logic 运算符

  4. 5、Jmeter监听器技术

    1.图形监听器: 1.1:Lable:表示标签(标题)http请求的名称 1.2:Samples:跑的一共的线程数 1.3:Average:平均响应时间 1.4:Median:中间值 1.5:90%L ...

  5. mysqli语句的用法

    改用了PHP7的环境后 mysql语句好像就不能用了.. 有点懵逼 就写一下该怎么用以免遗忘 ======= 1 链接数据库 $link=mysqli_connect('127.0.0.1:xxxx' ...

  6. 2020/513-笔记:怎么知道Oracle数据库一个中文汉字占几个字节

    1. 执行语句:             select userenv('language') from dual; 如果显示如下:             SIMPLIFIED CHINESE_CH ...

  7. El_获取域中存储的值和El_获取域中存储的值_对象值

    2获取值 1.el表达式只能从域对象中获取值 2语法: 1.$[域名称.键}:从指定域中获取指定键的值域名称:1.pageScope2.requestScope 3.sessionScope 4.ap ...

  8. 借助5G智能网关实现无人化智慧农业应用

    发展智慧农业是新时代的必由之路.依托5G+物联网技术赋能农业生产,能够实现更少的人员需求,更大面积的综合土地管理,更实时精细的生产环境监测,更智能的生产自主管控.5G技术正以其广连接.低时延的优势,助 ...

  9. 腾讯云等Linux环境下Redis安装配置

    1.下载redis解压安装命令教程 https://www.cnblogs.com/hunanzp/p/12304622.html 2.配置远程连接 修改bind 127.0.0.0  为 bind ...

  10. 2022安洵杯pwn-babyarm

    首先就是绕过一个简单的变表base64的加密key 然后就是一个类似ret2libc的利用方式,不过没有直接控制r0的gadget 使用的是arm32中万能的gadget from pwn impor ...