bzoj4998 星球联盟 LCT + 并查集】的更多相关文章

题目描述 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流.但是,组成 联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两个星球,使得它们能 够相互到达.若两个星球属于同一个联盟,则必须存在一条环形线路经过这两个星球,即两个星球间存在两条没有 公共隧道的路径.为了壮大联盟的队伍,这些星球将建设P条新的太空隧道.这P条新隧道将按顺序依次建成.一条 新轨道建成后,可能会使一些星球属于同一个联盟.你的任务是计算出,在一条新隧…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4998 题解 根据题意,就是要动态维护点双,求出一个点双的权值和. 所以这道题就是和 bzoj2959 长跑 一样了,每一次枚举一条路径上的点双暴力和合并,并查集维护. 本来是想再练一练 LCT 码力的,结果又调了半天. 大概错误都有: connect 函数的 \(fa\) 和 \(o\) 的顺序写错: 每一次把一条链合并成一个点双的时候需要把代表点的孩子删掉!!! 要把连边和 dfs 一起写…
题目描述 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流.但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两个星球,使得它们能够相互到达.若两个星球属于同一个联盟,则必须存在一条环形线路经过这两个星球,即两个星球间存在两条没有公共隧道的路径.为了壮大联盟的队伍,这些星球将建设P条新的太空隧道.这P条新隧道将按顺序依次建成.一条新轨道建成后,可能会使一些星球属于同一个联盟.你的任务是计算出,在一条新隧道建设完…
题面 传送门 题解 总算有自己的\(bzoj\)账号啦! 话说这题好像\(Scape\)去年暑假就讲过--然而我到现在才会-- \(LCT\)什么的跑得太慢了而且我也不会,所以这里是一个并查集的做法 首先题目意思就是要我们动态维护点双 我们离线,先求出一个森林,并且要使用编号尽量小的边 连上一条边的时候,如果它们还没有联通,那么显然答案是\(No\) 如果已经联通,那么它们这棵树的路径上所有点都会被缩进同一个点双里.暴力的话复杂度显然爆炸 我们另外开一个并查集\(ga\),表示\(i\)所在的边…
bzoj4998 星球联盟 原题链接 题解 先按照输入顺序建一棵树(森林),然后用一个并查集维护联盟的关系,对于不是树上的边\(a-b\),就把\(a-lca(a,b),b-lca(a,b)\)全部合并(一个圈),输出\(a\)所在并查集的\(Siz\),树边输出\(No\) Code // It is made by XZZ #include<cstdio> #include<algorithm> #include<cmath> #define Fname "…
题目描述 某校开展了同学们喜闻乐见的阳光长跑活动.为了能“为祖国健康工作五十年”,同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑运动.一时间操场上熙熙攘攘,摩肩接踵,盛况空前.为了让同学们更好地监督自己,学校推行了刷卡机制.学校中有n个地点,用1到n的整数表示,每个地点设有若干个刷卡机.有以下三类事件:1.修建了一条连接A地点和B地点的跑道.2.A点的刷卡机台数变为了B.3.进行了一次长跑.问一个同学从A出发,最后到达B最多可以刷卡多少次.具体的要求如下:当同学到达一个地点时…
即要求动态维护边双.出现环时将路径上的点合并即可.LCT维护.具体地,加边成环时makeroot+access+splay一套把这段路径提出来,暴力dfs修改并查集祖先,并将这部分与根断开,视为删除这些点,以后就以并查集中的祖先代替这些点.access时更新每个点的父亲.注意由于之前的删点操作,判断是否连通需要另开一个并查集而不能findroot. #include<iostream> #include<cstdio> #include<cmath> #include&…
两种方法: 1.LCT 第一次LCT,只有link-cut和询问,无限T,到COGS上找了数据,发现splay里的父亲特判出错了(MD纸张),A了,好奇的删了反转T了.... #include <iostream> #include <cstdio> #define N 10010 using namespace std; inline int read() {;+c-'; return ans;} struct SplayNode { SplayNode *fa,*ch[]; b…
http://www.lydsy.com/JudgeOnline/problem.php?id=2049 bzoj挂了..在wikioi提交,,1A-写lct的速度越来越快了-都不用debug-- 新学习了换根操作及link cut的换根操作-很简单的.到时候我开专题再说吧. (军训终于完了T_T #include <cstdio> #include <cstring> #include <string> #include <iostream> #inclu…
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2049 给出一个森林,起始互不相连,现在有link和cut两种操作,问x,y是否在一棵树里. 分析 解法1: 没有路径压缩的并查集. 在别人博客里看来的神奇解法,其实我并不是非常了解... 大概是在并查集的时候不雅所路径,这样就记录了哪两个点相连. 1.link(u,v):把u翻到根上去,f[u]=v. 2.cut(u,v):把u翻到根上去,然后f[v]=0(原来f[v]=u). 3.quer…