BZOJ 4736: 温暖会指引我们前行(LCT)

该博客探讨了如何使用线段树(LCT)来动态维护最大生成树,并强调在处理过程中查询值与权值的区别。博主指出在实现时将边转化为点,并利用splay进行查找操作,同时提醒在修改时需检查边是否已存在于结构中。
摘要由CSDN通过智能技术生成

题目

分析

动态维护一颗最大生成树,注意查询的值不是用来做最大生成树的那个权值。

具体就是把边变成点。一些查找要素都可以放在splay中查找。

还有就是要注意如果有一条边不选的话,那么我们可能不会为它建立结点,所以要特判一下修改的时候它是不是出现了,出现了就不管。

代码

#include<cmath>
#include<queue>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define lc ch[now][0]
#define rc ch[now][1]
const int maxn=4e5+105,inf=2e9;
int n,m;
char s[10];
int mp[maxn];
struct Link_Cut_Tree
{
    int np,ch[maxn][2],fa[maxn],w[maxn],mi[maxn],sum[maxn],dist[maxn],L[maxn],R[maxn],num[maxn];
    bool rev[maxn];
    void Initial()
    {
        np=n;
    }
    void pushup(int now)
    {
        mi[now]=w[now];
        sum[now]=dist[now];
        num[now]=now;
        if(lc)
        {
            sum[now]+=sum[lc];
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值