FZU 2082 过路费(树链剖分)
FZU 2082 过路费
树链抛分改动边的模板题
代码:
#include <cstdio>
#include <cstring>
#include <vector>
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<int> 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;
}
FZU 2082 过路费(树链剖分)的更多相关文章
- FZU 2082 过路费 (树链剖分 修改单边权)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2082 树链剖分模版题,求和,修改单边权. #include <iostream> #include ...
- FZU Problem 2082 过路费 树链剖分
Problem 2082 过路费 Problem Description 有n座城市,由n-1条路相连通,使得任意两座城市之间可达.每条路有过路费,要交过路费才能通过.每条路的过路费经常会更新, ...
- fzu 2082 过路费 (树链剖分+线段树 边权)
Problem 2082 过路费 Accept: 887 Submit: 2881Time Limit: 1000 mSec Memory Limit : 32768 KB Proble ...
- FZU 2082 过路费(树链剖分)
树链剖分模板题. FZU炸了,等交上去AC了再贴代码.
- [wikioi 1519]过路费(最小生成树+树链剖分)
题目:http://www.wikioi.com/problem/1519/ 题意:给你一个连通的无向图,每条边都有权值,给你若干个询问(x,y),要输出从x到y的路径上边的最大值的最小值 分析:首先 ...
- FZU2176---easy problem (树链剖分)
http://acm.fzu.edu.cn/problem.php?pid=2176 Problem 2176 easy problem Accept: 9 Submit: 32Time Lim ...
- BZOJ 2157: 旅游( 树链剖分 )
树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...
- BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]
3626: [LNOI2014]LCA Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2050 Solved: 817[Submit][Status ...
- BZOJ 1984: 月下“毛景树” [树链剖分 边权]
1984: 月下“毛景树” Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1728 Solved: 531[Submit][Status][Discu ...
随机推荐
- 正确Linux新手很实用20命令
//正确Linux新手很实用20命令 //slwang 2014.4.19 1, ls list directory contents 内容 ls -l //以详情模式(long li ...
- 找出二叉树中和为n的路径
题目描述: 输入一个整数和一棵二元树.从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径.打印出和 与输入整数相等的所有路径. 二叉树中的路径 从二叉树的根节点出发,至二叉树的叶子节点的 ...
- poj 2253 Frogger (最长路中的最短路)
链接:poj 2253 题意:给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过随意石头到达B, 问从A到B多条路径中的最长边中的最短距离 分析:这题是最短路的变形,曾经求的是路径总长的最 ...
- IOS设计模式学习(21)享元
1 前言 在面向对象软件设计中,利用公共对象不仅能节省资源还能提高性能.共享的对象只能提供某些内在的信息,而不能用来识别对象.专门用于设计可共享对象的一种设计模式叫做享元模式(Flyweight pa ...
- wpf做的3d滑动gallery
原文:wpf做的3d滑动gallery wpf做的3d滑动gallery 随着iphone\ipad的流行及热捧,现在做移动产品不管是什么平台的,领导总想做成像ios系统的样子.自从微软发布了wind ...
- javascript焦点图(能够自己主动切换 )
/* 思路总结: 1.实现图片滚动的function.鼠标经时候获取当前li的index.设置ndex自己主动递增的函数.实现淡入淡出效果的函数 2.整个实现效果一传递index为主线 3.我的编写代 ...
- [LeetCode141]Linked List Cycle
题目:Given a linked list, determine if it has a cycle in it. 判断一个链表是否有环 代码: /** * Definition for singl ...
- 交换A与B值的四种方法
在网上看到了这样一道面试题,"int A=5,int B=2,怎样交换A与B的值",或许这是一道简单到不能再简单的题,但能作为一道面试题,肯定有其独特之处 大多数人会通过定义第三个 ...
- 在线API大全
之前整理过几个经常使用api地址,在经常使用在线API集合博文中. 近期浏览网页的时候,又发现一个很完整的api的大全,分享出来,建议大家收藏起来,用的时候方便查询. 经常使用API文档索引http: ...
- HDU 1085-Holding Bin-Laden Captive!(生成功能)
Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...