思路:边权转化到点权上,统一把每一条边的边权集中到深度较深的点上去。

#include<stdio.h>
#include<iostream>
#include<cstring>
using namespace std;
#define maxn 134567
struct edg
{
int v,to,w,u;
} edge[maxn*2],in[maxn];
int n,q,cnt,sz,fa[maxn],head[maxn],s,ide,data[maxn];
int deep[maxn],siz[maxn],tree[maxn],u,v,w,typ,ans;
int id_data[maxn],tid[maxn],top[maxn],son[maxn];
void add(int u,int v,int w)
{
edge[++ide].v=v;
edge[ide].w=w;
edge[ide].to=head[u];
head[u]=ide;
}
int lowbit(int x)
{
return x&(-x);
}
void updata(int x,int ad)
{
while(x<=n)
{
tree[x]+=ad;
x+=lowbit(x);
}
}
int query(int x)
{
int re=0;
while(x>0)
{
re+=tree[x];
x-=lowbit(x);
}
return re;
}
void dfs1(int u,int pre,int op)
{
son[u]=-1,siz[u]=1;
deep[u]=op,fa[u]=pre;
for(int i=head[u]; i!=-1; i=edge[i].to)
{
int v=edge[i].v;
if(v==pre)continue;
dfs1(v,u,op+1);
data[v]=edge[i].w;
siz[u]+=siz[v];
if(son[v]==-1||siz[son[u]]<siz[v])
son[u]=v;
}
}
void dfs2(int u,int tp)
{
top[u]=tp,tid[u]=++cnt;
id_data[cnt]=data[u];
if(son[u]!=-1)dfs2(son[u],tp);
for(int i=head[u]; i!=-1; i=edge[i].to)
{
int v=edge[i].v;
if(v==fa[u]||v==son[u])continue;
dfs2(v,v);
}
}
void slove(int x,int y)
{
int tx=top[x],ty=top[y];
while(tx!=ty)
{
if(deep[tx]<deep[ty])swap(x,y),swap(tx,ty);
ans+=query(tid[x])-query(tid[tx]-1);
x=fa[tx],tx=top[x];
}
if(deep[x]<deep[y])swap(x,y);
ans+=query(tid[x])-query(tid[y]);
}
int main()
{
memset(head,-1,sizeof(head));
scanf("%d%d%d",&n,&q,&s);
for(int i=1; i<n; i++)
{
scanf("%d%d%d",&u,&v,&w);
in[i].u=u;
in[i].v=v;
in[i].w=w;
add(u,v,w);
add(v,u,w);
}
dfs1(1,0,1);
dfs2(1,1);
for(int i=1; i<=n; i++)
updata(i,id_data[i]);
while(q--)
{
scanf("%d",&typ);
if(typ==0)
{
ans=0;
scanf("%d",&u);
slove(u,s);
printf("%d\n",ans);
s=u;
}
else
{
scanf("%d%d",&u,&v);
if(deep[in[u].u]>deep[in[u].v])
u=in[u].u;
else u=in[u].v;
int xxx=query(tid[u])-query(tid[u]-1);
v-=xxx;
updata(tid[u],v);
}
}
return 0;
}

  

B - Housewife Wind-树链剖分-树状数组的更多相关文章

  1. hdu 3966 Aragorn's Story(树链剖分+树状数组/线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意: 给出一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路 ...

  2. Aragorn's Story 树链剖分+线段树 && 树链剖分+树状数组

    Aragorn's Story 来源:http://www.fjutacm.com/Problem.jsp?pid=2710来源:http://acm.hdu.edu.cn/showproblem.p ...

  3. 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释

    P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...

  4. POJ 2763 Housewife Wind(树链剖分+树状数组)

    [题目链接] http://poj.org/problem?id=2763 [题目大意] 在一棵树上,给出一些边的边长,有修改边的边长的操作, 询问每次从当前点到目标点的最短距离 [题解] 树链剖分之 ...

  5. HDU 3966 Aragorn's Story 树链剖分+树状数组 或 树链剖分+线段树

    HDU 3966 Aragorn's Story 先把树剖成链,然后用树状数组维护: 讲真,研究了好久,还是没明白 树状数组这样实现"区间更新+单点查询"的原理... 神奇... ...

  6. bzoj1146整体二分+树链剖分+树状数组

    其实也没啥好说的 用树状数组可以O(logn)的查询 套一层整体二分就可以做到O(nlngn) 最后用树链剖分让序列上树 #include<cstdio> #include<cstr ...

  7. HDU 5044 (树链剖分+树状数组+点/边改查)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5044 题目大意:修改链上点,修改链上的边.查询所有点,查询所有边. 解题思路: 2014上海网赛的变 ...

  8. hdu 3966 Aragorn&#39;s Story(树链剖分+树状数组)

    pid=3966" target="_blank" style="">题目链接:hdu 3966 Aragorn's Story 题目大意:给定 ...

  9. (简单) POJ 3321 Apple Tree,树链剖分+树状数组。

    Description There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow ...

  10. Codeforces Round #425 (Div. 2) Problem D Misha, Grisha and Underground (Codeforces 832D) - 树链剖分 - 树状数组

    Misha and Grisha are funny boys, so they like to use new underground. The underground has n stations ...

随机推荐

  1. 深入理解ES6箭头函数中的this

    简要介绍:箭头函数中的this,指向与一般function定义的函数不同,比较容易绕晕,箭头函数this的定义:箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定. 1.何为定义时 ...

  2. 2019南昌邀请赛网络预选赛 I. Max answer(单调栈+暴力??)

    传送门 题意: 给你你一序列 a,共 n 个元素,求最大的F(l,r): F(l,r) = (a[l]+a[l+1]+.....+a[r])*min(l,r); ([l,r]的区间和*区间最小值,F( ...

  3. Java计算文件MD5值(支持大文件)

    import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.securit ...

  4. 如何实现Python调用C代码--python与C之间如何通信(swig)

    转载: https://www.zhihu.com/question/23003213 1. C代码如何调用Python 1.1 test #include <Python.h> int ...

  5. 第二节:框架前期准备篇之AutoFac常见用法总结

    一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点点小小的风波,我说我的好,他说他的好,非常容 ...

  6. Centos7安装vsftpd (FTP服务器)

    Centos7安装vsftpd (FTP服务器) 原文链接:https://www.jianshu.com/p/9abad055fff6 TyiMan 关注 2016.02.06 21:19* 字数 ...

  7. maven多个web模块进行合并

    原文地址: https://blog.csdn.net/u011666411/article/details/77160907

  8. DevExpress 控件汉化方法

    Ø  简介 本文介绍下 DevExpress 控件的汉化方法,对于英文不怎么好的同学来说,还是非常有必要的.DevExpress 汉化分为运行时汉化,和设计时汉化. 1.   运行时汉化 1)   首 ...

  9. [译]Ocelot - Delegating Handlers

    原文 可以为HttpClient添加delegating handlers. Usage 为了添加delegating handler需要做两件事. 首先如下一样创建一个类. public class ...

  10. The container 'Maven Dependencies' references non existing library '

    解决办法 uncheck the option "resolve dependencies from workspace projects" from the maven tab ...