JZOJ 2256【ZJOI2008】树的统计

35 篇文章 0 订阅
7 篇文章 0 订阅

Description

 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。
  我们将以下面的形式来要求你对这棵树完成一些操作:
  I. CHANGE u t : 把结点u的权值改为t
  II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值
  III. QSUM u v: 询问从点u到点v的路径上的节点的权值和
  注意:从点u到点v的路径上的节点包括u和v本身

Analysis

本蒟蒻的第一道树剖。
不多说,裸题一道。

Key Code

int solve(int u,int v,bool bz)
{
    int ans=bz?-N:0,x;
    while(top[u]!=top[v])
    {
        if(dep[top[u]]>dep[top[v]]) swap(u,v);
        x=top[v];
        if(bz) ans=max(ans,find(1,1,m,w[x],w[v],bz));
        else ans+=find(1,1,m,w[x],w[v],bz);
        v=fa[x];
    }
    if(dep[u]>dep[v]) swap(u,v);
    if(bz) ans=max(ans,find(1,1,m,w[u],w[v],bz));
    else ans+=find(1,1,m,w[u],w[v],bz);
    return ans;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值