C01【模板】并查集
视频链接:C01【模板】并查集——信息学奥赛算法_哔哩哔哩_bilibili
1. 扁平树,维护 fa[]
2. 压缩找根 find(x)
3. 合并集合 fa[x]=y
P3367 【模板】并查集 - 洛谷//并查集 路径压缩 #include<bits/stdc++.h> using namespace std; const int N=200005; int n,m,x,y,z; int fa[N]; int find(int x){ if(fa[x]==x) return x; return fa[x]=find(fa[x]); } void unset(int x,int y){ fa[find(x)]=find(y); } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) fa[i]=i; while(m--){ cin>>z>>x>>y; if(z==1) unset(x,y); else{ if(find(x)==find(y)) puts("Y"); else puts("N"); } } }
//并查集 路径压缩+按秩合并 #include<bits/stdc++.h> using namespace std; const int N=200005; int n,m,x,y,z; int fa[N],siz[N]; //子树大小 int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]); } void unset(int x,int y){ x=find(x),y=find(y); if(x==y)return; if(siz[x]<siz[y]) swap(x,y); fa[y]=x; siz[x]+=siz[y]; } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) fa[i]=i,siz[i]=1; while(m --){ cin>>z>>x>>y; if(z==1) unset(x,y); else{ if(find(x)==find(y))puts("Y"); else puts("N"); } } }
P1551 亲戚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P2078 朋友 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P2814 家谱 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P1536 村村通 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P1111 修复公路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P1195 口袋的天空 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P1455 搭配购买 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P1396 营救 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P1991 无线通讯网 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P4047 [JSOI2010] 部落划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P1967 [NOIP2013 提高组] 货车运输 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
浙公网安备 33010602011771号