foj 2082 树链剖分 第2天
擦,没啥好说的,这个模板至少得打10遍。。纪念自己成功的打错了。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define LL int
#define lson id << 1
#define rson id << 1|1
const LL M = 100008;
LL ti[M],top[M],siz[M],son[M],father[M],tp,idx,dep[M];
struct Linetree{
LL sum,l,r,mark;
LL mid(){
return (l+r)/2;
}
}node[M*4];
struct {
LL head;
}H[M];
struct {
LL v,next;
}E[M];
void add(LL u,LL v){
E[tp].v = v;
E[tp].next = H[u]. head;
H[u].head = tp++;
} void dfs_1(LL u,LL fa){ son[u] = 0;siz[u] = 1;father[u] = fa; dep[u] = dep[fa] + 1;
for(LL i=H[u].head;i!=-1;i=E[i].next){
LL v = E[i].v;
if(v == fa)continue;
dfs_1(v,u);
siz[u] += siz[v];
if(siz[v] > siz[son[u]])son[u] = v ;
}
}
void dfs_2(LL u,LL fa){
ti[u] = idx++;
top[u] = fa;
if(son[u])dfs_2(son[u],fa);
for(LL i=H[u].head;i!=-1;i = E[i].next){
LL v = E[i].v;
if(v == father[u]||v == son[u]) continue;
dfs_2(v,v);
} }
/* 线段树*/
void build_tree(LL id,LL l,LL r){
node[id].l = l;
node[id].r = r;
node[id].sum = 0;
if(l == r) return;
LL mid = node[id].mid();
build_tree(lson,l,mid);
build_tree(rson,mid+1,r);
}
void push_up(LL id){
node[id].sum = node[lson].sum + node[rson].sum;
}
void update(LL id,LL k,LL w){
if(node[id].l == k&&node[id].r == k){
node[id].sum = w;
return;
}
LL mid = node[id].mid();
if(k <=mid)update(lson,k,w);
else update(rson,k,w);
push_up(id);
}
LL query(LL id,LL l,LL r){
if(node[id].l == l && node[id].r == r)
return node[id].sum;
LL mid = node[id].mid();
if(r <=mid )return query(lson,l,r);
else if(l > mid)return query(rson,l,r);
else {
return query(lson,l,mid) + query(rson,mid+1,r);
}
}
LL e[M][4];
LL findmax(LL u,LL v){
LL f1 = top[u];
LL f2 = top[v];
int sum = 0;
while(f1 != f2){
if(dep[f1] < dep[f2]){
swap(f1,f2);swap(u,v);
}
sum += query(1,ti[f1],ti[u]);
u = father[f1];f1 = top[u];
}
if(u == v) return sum;
if(dep[u] > dep[v] ) swap(u,v);
sum += query(1,ti[son[u]],ti[v]);
return sum;
}
void init(){
memset(E,-1,sizeof(E));
memset(H,-1,sizeof(H));
tp = 0;
idx = 0;
memset(son,0,sizeof(son));
}
int main(){
//freopen("input.txt","r",stdin);
LL n,m,u,v,w;
while(~scanf("%d%d",&n,&m)){
init();
for(LL i=0;i<n-1;i++){
scanf("%d%d%d",&e[i][0],&e[i][1],&e[i][2]);
add(e[i][0],e[i][1]);
add(e[i][1],e[i][0]);
}
dfs_1(1,1);
dfs_2(1,1);
build_tree(1,1,idx-1);
for(LL i=0;i<n-1;i++){
if(dep[e[i][0]] > dep[e[i][1]])
swap(e[i][0],e[i][1]);
update(1,ti[e[i][1]],e[i][2]);
}
while(m --){
scanf("%d%d%d",&w,&u,&v);
if(w)printf("%d\n",findmax(u,v));
else update(1,ti[e[u-1][1]],v);
}
}
}
foj 2082 树链剖分 第2天的更多相关文章
- FZU 2082 过路费 (树链剖分 修改单边权)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2082 树链剖分模版题,求和,修改单边权. #include <iostream> #include ...
- fzu 2082 过路费 (树链剖分+线段树 边权)
Problem 2082 过路费 Accept: 887 Submit: 2881Time Limit: 1000 mSec Memory Limit : 32768 KB Proble ...
- FZU 2082 过路费(树链剖分)
树链剖分模板题. FZU炸了,等交上去AC了再贴代码.
- 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 ...
- codevs 1228 苹果树 树链剖分讲解
题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...
- 并查集+树链剖分+线段树 HDOJ 5458 Stability(稳定性)
题目链接 题意: 有n个点m条边的无向图,有环还有重边,a到b的稳定性的定义是有多少条边,单独删去会使a和b不连通.有两种操作: 1. 删去a到b的一条边 2. 询问a到b的稳定性 思路: 首先删边考 ...
- 树链剖分+线段树 CF 593D Happy Tree Party(快乐树聚会)
题目链接 题意: 有n个点的一棵树,两种操作: 1. a到b的路径上,给一个y,对于路径上每一条边,进行操作,问最后的y: 2. 修改某个条边p的值为c 思路: 链上操作的问题,想树链剖分和LCT,对 ...
随机推荐
- Objective-C该Protocol
Objective-C该Protocol Protocol 简单来说就是一系列方法的列表,当中声明的方法能够被不论什么类实现,这样的模式一般称为(delegation)模式 在iOS中和OS X中,A ...
- Sqlserver2000联系Oracle11G数据库进行实时数据的同步
Sqlserver2000联系Oracle11G数据库进行实时数据的同步 1,前提条件 我有sqlserver2000环境,已经存在oracle11g环境,准备这两个数据库,建立各自的訪问账号,两者之 ...
- SQL Server AlwaysOn中的几个误区
原文:SQL Server AlwaysOn中的几个误区 AlwaysOn自SQL Server2012之后已经发布很久了,最近我在给一些客户做咨询的时候经常被问起是不是应该使用AlwaysOn,从客 ...
- IE8/IE9无法启用JavaScript怎么办
在IE8/IE9 中,有些同学在浏览网页时,收到提示:“需要启用 JavaScript …”,并且会发现网页上某些功能不能用了,比如点击网页里的按钮没反应等等.这个是因为浏览器的JavaScript ...
- 小说mvvm
与多样化和复杂的前,设计模式不再是后端专有名词.从最初的面向对象的,框架制定了到现在为止mvc等一下,今天,它主要是关于Model-View-ViewModel(MVVM). 对于mvc大家可能都会相 ...
- java这些东西发展(1)-------大约ORA00604和ORA12705
******************************有关myEclipse和oracle在连接发生的一个问题********************************* 用户界面显示的评 ...
- tomcatserver乱码问题,tomcat与数据库之间的编码统一转换
在tomcat文件夹的conf文件夹下,改动server.xml文件,在以下截图中的位置加上URIEncoding="UTF-8"则表示tomcat编码转换为utf-8风格, 一般 ...
- 了解webpack
学习笔记 一步步了解webpack 前言 demo 地址: https://github.com/yy8597/webpack-demos 之前学习了 broswerify,发现确实很好用.虽然没 ...
- python2编码总结(转)
以下依次列出python2常遇到的几个问题及讲解. # -*- coding:utf-8 -*- python2默认以ASCII编码,但是在实际编码过程中,我们会用到很多中文,为了不使包含中文的程序报 ...
- Android系统关机或几种方式重启
---------------------------------------------------------------------------------------------------- ...