bzoj4998 星球联盟
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 "CJOJ2550"
using namespace std;
#define rep(a,b,c) for(rg int a=b;a<=c;a++)
#define drep(a,b,c) for(rg int a=b;a>=c;a--)
#define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0;rg char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x;
}
const int maxn=200100,maxm=200100<<2;
int id,fir[maxn],nxt[maxm],dis[maxm];
int fa[maxn],Fa[maxn],FA[maxn],dep[maxn],Siz[maxn];
int A[maxn<<1],B[maxn<<1];
bool yes[maxn<<1];
il int hd(int s){return fa[s]==s?s:(fa[s]=hd(fa[s]));}
il int Hd(int s){return Fa[s]==s?s:(Fa[s]=Hd(Fa[s]));}
il vd add(int a,int b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
il vd dfs(int now){erep(i,now)if(!dep[dis[i]])dep[dis[i]]=dep[now]+1,FA[dis[i]]=now,dfs(dis[i]);}
il vd doit(int s){
rg int a=Hd(s),b=Hd(FA[s]);
if(a^b)Siz[b]+=Siz[a],Fa[a]=b;
}
int main(){
// freopen(Fname".in","r",stdin);
// freopen(Fname".out","w",stdout);
int a,b,n=gi(),m=gi(),p=gi();
rep(i,1,n)fa[i]=Fa[i]=i,Siz[i]=1;
rep(i,1,m+p){
a=A[i]=gi(),b=B[i]=gi();
if(hd(a)^hd(b))add(a,b),add(b,a),fa[hd(a)]=hd(b);
else yes[i]=1;
}
rep(i,1,n)if(!FA[i])FA[i]=-1,dep[i]=1,dfs(i);
rep(i,1,m)if(yes[i]){
a=A[i],b=B[i];
while(a^b)
if(dep[a]>dep[b])doit(a),a=FA[a];
else doit(b),b=FA[b];
}
rep(i,1,p)if(yes[i+m]){
a=A[i+m],b=B[i+m];
while(a^b)
if(dep[a]>dep[b])doit(a),a=FA[a];
else doit(b),b=FA[b];
printf("%d\n",Siz[Hd(a)]);
}else puts("No");
return 0;
}
bzoj4998 星球联盟的更多相关文章
- BZOJ4998星球联盟——LCT+并查集(LCT动态维护边双连通分量)
题目描述 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流.但是,组成 联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两 ...
- BZOJ4998 星球联盟(LCT+双连通分量+并查集)
即要求动态维护边双.出现环时将路径上的点合并即可.LCT维护.具体地,加边成环时makeroot+access+splay一套把这段路径提出来,暴力dfs修改并查集祖先,并将这部分与根断开,视为删除这 ...
- bzoj4998: 星球联盟(link-cut-tree)
题面 bzoj 题解 bzoj2959: 长跑的弱化版 产生了环就并查集维护一下 Code #include<bits/stdc++.h> #define LL long long #de ...
- bzoj4998 星球联盟 LCT + 并查集
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4998 题解 根据题意,就是要动态维护点双,求出一个点双的权值和. 所以这道题就是和 bzoj2 ...
- 【NOIP2017练习&BZOJ4998】星球联盟(强联通分量,并查集)
题意: 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两个 ...
- 【bzoj4998】星球联盟 LCT+并查集
题目描述 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流.但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两个 ...
- 【BZOJ4998】星球联盟
题解: 应该还是比较水的 首先很容易发现的就是两个点一旦联通他们就永远联通了 所以联通之后我们就把他们之间缩成一个点
- 【bzoj4998】星球联盟(并查集+边双)
题面 传送门 题解 总算有自己的\(bzoj\)账号啦! 话说这题好像\(Scape\)去年暑假就讲过--然而我到现在才会-- \(LCT\)什么的跑得太慢了而且我也不会,所以这里是一个并查集的做法 ...
- [jzoj]3875.【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)
Link https://jzoj.net/senior/#main/show/3875 Problem 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流. ...
随机推荐
- 【模板】Tarjan算法与有向图的强连通性
概念 流图 给定一个有向图G= (V,E),若存在r∈V满足,满足从r出发能够到达V中所有的点,则称G是一个流图,记为(G,r),其中r是流图的源点. 流图的搜索树 在一个流图(G,r)上从r出发,进 ...
- git 如何忽略文件以及使用.gitignore 不生效的解决办法
(1) git 如何忽略文件 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件).这个文件每一行保存了一 ...
- 数据结构——平衡二叉树(AVLTree)
3.平衡二叉树 平衡二叉树,又称AVL树,它是一种特殊的二叉排序树. 3.1 平衡二叉树的四种自旋 这个左旋.右旋,在方向上和我观念里的是相反的. 查了之后才知道: 1.外侧插入:LL.RR,都是在最 ...
- 【jQuery】todolist
1 2 3 用npm命令下载依赖,优点:不用去网上找链接,代码都一样 4.jQuery自动下载进node_modules文件下 npm install jquery --save 这句命令的意思是保 ...
- Project Euler:Problem 86 Cuboid route
A spider, S, sits in one corner of a cuboid room, measuring 6 by 5 by 3, and a fly, F, sits in the o ...
- 【Javascript-基础-Date】本地时间与UTC(GMT)时间转换
UTC(GMT) 整个地球分为二十四时区,每个时区都有自己的本地时间.在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinat ...
- HashMap源码阅读与解析
目录结构 导入语 HashMap构造方法 put()方法解析 addEntry()方法解析 get()方法解析 remove()解析 HashMap如何进行遍历 一.导入语 HashMap是我们最常见 ...
- 通过代码退出IOS程序
-(void) tapClick:(UITapGestureRecognizer *)tap{ [UIViewbeginAnimations:@"exitApplication"c ...
- Mave实战(1)——Maven介绍
目录 1. Maven介绍 1.1. 何为Maven 1.1.1. Maven是优秀的构建工具 1.1.2. Maven不仅仅是构建工具 1. Maven介绍 1.1. 何为Maven Maven是一 ...
- java8时间工具类Localdate、LocaldateTime
优点: 1.方便. Date 只能是日期加时间的格式,而 LocalDate .LocalTime.LocalDateTime 分别代表日期,时间,日期+时间,非常灵活.再就是后者在日期计算及格式化方 ...