【Ybtoj Capítulo 10 Ejemplo 1】 Plantilla de cheque combinado [Cheque combinado]

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí


Ideas para resolver problemas

Y verifique las preguntas de la plantilla, use la combinación anterior.M e r g e función para lograr la fusión de conjuntos yencontrar buscarLa función f i n d encuentra los elementos representativos del conjunto y usa si los elementos representativos de los dos elementos son iguales para juzgar si están en el mismo conjunto Tanto la compresión de ruta como la fusión de rangos pueden pasar esta pregunta.


Código

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<bitset>
using namespace std;

int n,m,z,x,y,fa[10010];

int find(int x){
    
    
	if(fa[x]!=x)
		return fa[x]=find(fa[x]);//路径压缩
	else return fa[x];
}

void merge(int x,int y){
    
    
	int xx=find(x),yy=find(y);
	if(xx!=yy)
		fa[xx]=yy;
}

int main(){
    
    
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		fa[i]=i;
	for(int i=1;i<=m;i++)
	{
    
    
		scanf("%d%d%d",&z,&x,&y);
		if(z==1)
			merge(x,y);
		if(z==2)
		{
    
    
			if(find(x)==find(y))
				printf("Y\n");
			else printf("N\n");
		}
	}
}

Supongo que te gusta

Origin blog.csdn.net/kejin2019/article/details/115025144
Recomendado
Clasificación