算法竞赛备赛——【数据结构】并查集

并查集

普通并查集

注意根据数据大小来开int 或者 long long 否则容易MLE

树的存储结构 双亲表示法------数组 孩子表示法 孩子兄弟表示法

P3367 【模板】并查集 - 洛谷

C++ 复制代码
#include <bits/stdc++.h>
using ll=long long;
using namespace std;
const int N=2e5+5; 

int fa[N];
int n,m;

int find(int x){
	if(x==fa[x])
		return x;
	else return fa[x]=find(fa[x]);
} 
 
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		fa[i]=i;
	}
	for(int i=0;i<m;++i){
		int z,x,y;cin>>z>>x>>y;
		if(z==1){
			//合并
			int fx=find(x);
			int fy=find(y);
			fa[fx]=fy;
		}else{
			//查询 
			int fx=find(x);
			int fy=find(y);
			if(fx==fy) cout<<"Y"<<endl;
			else cout<<"N"<<endl;
		}
	}
	return 0;
}

种类并查集

扩展域并查集 可描述敌对关系

敌人 朋友 没关系 扩展为2n

天敌 同类 猎物 没关系 扩展为3n

P1525 [NOIP 2010 提高组\] 关押罪犯 - 洛谷](https://www.luogu.com.cn/problem/P1525) ```C++ #include using ll=long long; using namespace std; const int N=2e4+2; int f[2*N]; struct enemy{ int a,b,c; }e[100005]; bool cmp(enemy& e1,enemy& e2){ return e1.c>e2.c; } int find(int x){ if(f[x]==x){ return x; } else return f[x]=find(f[x]); } int main(){ int n,m;cin>>n>>m; for(int i=1;i<=2*n;++i){ f[i]=i; } for(int i=1;i<=m;++i){ cin>>e[i].a>>e[i].b>>e[i].c; } sort(e+1,e+m+1,cmp); for(int i=1;i<=m;i++){ int fa=find(e[i].a); int fb=find(e[i].b); int fad=find(e[i].a+n); int fbd=find(e[i].b+n); if(fa==fb){ cout< using ll=long long; using namespace std; const int N=5e4+5; int f[3*N]; int find(int x){ if(f[x]==x){ return x; } else return f[x]=find(f[x]); } int main(){ int n,k;cin>>n>>k; int ans=0; for(int i=1;i<=3*n;++i){ f[i]=i; } while(k--){ int m,x,y; cin>>m>>x>>y; if(x>n||y>n||(m==2&&x==y)){ ans++; continue; } int fx=find(x);//x同类 int fy=find(y);//y同类 int xenemy=find(x+n);//x天敌 int yenemy=find(y+n);//y天敌 int xeat=find(x+2*n);//x猎物 int yeat=find(y+2*n);//y猎物 if(m==1){ if(xenemy==fy||yenemy==fx){ ans++; }else{ f[fx]=fy; f[xenemy]=yenemy; f[xeat]=yeat; } } if(m==2){ if(fx==fy||yeat==fx){ ans++; }else{ f[fy]=xeat; f[yeat]=xenemy; f[yenemy]=fx; } } } cout<

相关推荐
努力学习的小全全1 天前
【CCF-CSP】05-01数列分段
数据结构·算法·ccf-csp
转基因1 天前
命名空间与匿名空间
c++
煤球王子1 天前
学而时习之:C++中的动态内存管理
c++
云知谷1 天前
【经典书籍】《代码整洁之道》第六章“对象与数据结构”精华讲解
c语言·开发语言·c++·软件工程·团队开发
遗憾是什么.1 天前
数据结构 -- 栈
数据结构·算法·链表
清风er1 天前
智能座舱开发
算法·计算机视觉
Learn Beyond Limits1 天前
Data Mining Tasks|数据挖掘任务
人工智能·python·神经网络·算法·机器学习·ai·数据挖掘
liuhuapeng03041 天前
GetMapping自动截取List<String>字符
数据结构·windows·list
Croa-vo1 天前
Citadel SDE 面试复盘:直面硬核算法与思维挑战的双重压力
算法·面试·职场和发展
仰泳的熊猫1 天前
1013 Battle Over Cities
数据结构·c++·算法·pat考试