欢迎光临散文网 会员登陆 & 注册

洛谷P4172_动态树(Link Cut Tree)

2022-07-23 15:00 作者:Clayton_Zhou  | 我要投稿

https://www.luogu.com.cn/problem/P4172

一个关键点是把边看成点 ,加一条边u-v,编号为id,则

link(u,id);link(v,id);

每次求出 u 到 v 路径上的最大值,若大于要加的边的边权,则断开路径上的边权最大的边,z再加上要加的边即可。删边操作 与 加边操作 用 LCT 完成。

逆序处理query,将删除操作变成加边操作。


在旋转操作中,只pushup k的父亲p

void rot(int k){

int p=ar[k].fa;

int dir=ar[p].sn[1]==k,id=ar[ar[p].fa].sn[1]==p;

ar[k].fa=ar[p].fa;

if(!isrt(p)) ar[ar[p].fa].sn[id]=k;

ar[ar[k].sn[dir^1]].fa=p,ar[p].sn[dir]=ar[k].sn[dir^1];

ar[p].fa=k,ar[k].sn[dir^1]=p,pushup(p);

}



洛谷P4172_动态树(Link Cut Tree)的评论 (共 条)

分享到微博请遵守国家法律