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

洛谷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的儿子信息

    }





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

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