博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FZU 2082 过路费(树链剖分)
阅读量:7033 次
发布时间:2019-06-28

本文共 1956 字,大约阅读时间需要 6 分钟。

FZU 2082 过路费

树链抛分改动边的模板题

代码:

#include 
#include
#include
using namespace std;typedef long long ll;const int N = 50005;int dep[N], id[N], sz[N], top[N], son[N], fa[N], idx;int n, m;ll bit[N];struct Edge { int u, v; ll val; void read() { scanf("%d%d%lld", &u, &v, &val); }} e[N];vector
g[N];inline int lowbit(int x) { return x&(-x);}void dfs1(int u, int f, int d) { dep[u] = d; sz[u] = 1; fa[u] = f; son[u] = 0; for (int i = 0; i < g[u].size(); i++) { int v = g[u][i]; if (v == f) continue; dfs1(v, u, d + 1); sz[u] += sz[v]; if (sz[son[u]] < sz[v]) son[u] = v; }}void dfs2(int u, int tp) { top[u] = tp; id[u] = idx++; if (son[u]) dfs2(son[u], tp); for (int i = 0; i < g[u].size(); i++) { int v = g[u][i]; if (v == fa[u] || v == son[u]) continue; dfs2(v, v); }}void add(int x, ll v) { while (x < N) { bit[x] += v; x += lowbit(x); }}ll query(int x) { ll ans = 0; while (x) { ans += bit[x]; x -= lowbit(x); } return ans;}ll query(int l, int r) { return query(r) - query(l - 1);}ll gao(int u, int v) { int tp1 = top[u], tp2 = top[v]; ll ans = 0; while (tp1 != tp2) { if (dep[tp1] < dep[tp2]) { swap(tp1, tp2); swap(u, v); } ans += query(id[tp1], id[u]); u = fa[tp1]; tp1 = top[u]; } if (u == v) return ans; if (dep[u] > dep[v]) swap(u, v); ans += query(id[son[u]], id[v]); return ans;}int main() { while (~scanf("%d%d", &n, &m)) { idx = 0; memset(bit, 0, sizeof(bit)); for (int i = 1; i <= n; i++) g[i].clear(); for (int i = 1; i < n; i++) { e[i].read(); g[e[i].u].push_back(e[i].v); g[e[i].v].push_back(e[i].u); } dfs1(1, 0, 1); dfs2(1, 1); for (int i = 1; i < n; i++) { if (dep[e[i].u] < dep[e[i].v]) swap(e[i].u, e[i].v); add(id[e[i].u], e[i].val); } int ty, a, b; while (m--) { scanf("%d%d%d", &ty, &a, &b); if (ty == 0) { ll tmp = query(id[e[a].u], id[e[a].u]); add(id[e[a].u], (ll)b - tmp); } else printf("%lld\n", gao(a, b)); } } return 0;}

转载地址:http://gzyal.baihongyu.com/

你可能感兴趣的文章
最牛逼的 HTML 和 CSS 代码的背后
查看>>
apache 配置虚拟目录
查看>>
Hibernate、Mybait,Mysql、Postgresql适用场景
查看>>
WordPress表结构说明(转)
查看>>
html5 手机版页面,缩放比例调整
查看>>
Qte程序执行到app.exec()时出现Segmentation Fault问题的解决
查看>>
ceph 热迁移 live_migrate-XML error: CPU feature `pdpe1gb' specified more than once
查看>>
openstack iptables太长
查看>>
Web 通信 之 长连接、长轮询(long polling)
查看>>
python学习笔记2
查看>>
使用git命令做版本管理
查看>>
再次开篇
查看>>
Install VM Tools -- kernel header path
查看>>
主机无法访问虚拟机linux上启动的tomcat服务
查看>>
Android中this、super的区别
查看>>
ibatis log4j 配置 显示sql
查看>>
hadoop-2.3.0-cdh5.1.0完全分布式集群配置及HA配置(待)
查看>>
win7 + vs2013 + libiconv.lib
查看>>
drupal的drupal_register_shutdown_function
查看>>
创建一个多线程的QTcpServer
查看>>