题解
定义:
并查集,我们通常是在开始时让每个元素构成一个单元素的集合,
然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。
若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;
即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)
内计算出试题需要的结果,只能用并查集来描述。
#includeusing namespace std; int n,m,z,x,y,f[10005]; int find(int k){ //函数find,用来路径压缩 if(f[k]==k) return k; return f[k]=find(f[k]); } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) f[i]=i; //初始化i的老大为自己 for(int i=1;i<=m;i++){ cin>>z>>x>>y; if(z==1) f[find(x)]=find(y); //将 X与 Y 所在的集合合并 else if(find(x)==find(y)) //判断 X与 Y是否在同一集合内 cout<<"Y"< 暑期编程PK赛 得CSDN机械键盘等精美礼品!



