洛谷P3366_动态树(Link Cut Tree)
2022-07-19 13:02 作者:Clayton_Zhou | 我要投稿
https://www.luogu.com.cn/problem/P3366
给出一个无向图,求出最小生成树. 如果该图连通,则输出一个整数表示最小生成树的各边的长度之和。如果该图不连通则输出orz.
本程序的关键点:直接将每条边当做点idx,那么连边的操作就变成了
link(x,idx);link(idx,y);
通过替换路径上的最大边权,最后求出 最小生成树。
void rotate(int x)
{
int y=t[x].fa;
int z=t[y].fa;
int k=t[y].ch[1]==x;
if(!isroot(y))t[z].ch[t[z].ch[1]==y]=x;
t[x].fa=z;
t[y].ch[k]=t[x].ch[k^1];
t[t[x].ch[k^1]].fa=y;
t[x].ch[k^1]=y;
t[y].fa=x;
push_up(y);// 可以暂时不上传x的儿子信息
}