Búsqueda avanzada y combinada (HDU-3038, POJ-1182, etc.)

tema

¿Cuántas respuestas son incorrectas
链接https://vjudge.net/problem/HDU-3038#author=hpreon

Dada la longitud N de un intervalo y la suma de M subintervalos, la forma es: xyz, lo que significa que la suma de
subintervalos [x, y] es z.
Si una "suma de subintervalo" entra en conflicto con la "suma de subintervalo" anterior, es Error (y esta "suma de subintervalo" se ignorará en el siguiente juicio).
Encuentra el número total de errores.

Hay varios conjuntos de datos.
[entrada] La
primera fila de cada grupo de datos tiene dos números enteros NM (1 <= N <= 200000, 1 <= M <= 40000), y
cada fila subsiguiente tiene M pares de relaciones xyz;
Nota: z se puede considerar como un tipo entero de 32 bits.
[Salida] El
número de errores.

Ideas

Considere para cada sección y la información correcta para construir un borde de cinturón, formando una imagen: el a->bvalor del borde representa el intervalo (a,b]y.

Explicación:

  • ¿Por qué utilizar una forma de borde de este tipo para construir un mapa?
    Porque se puede encontrar que la información de este intervalo y el conjunto de búsqueda de unión tienen características similares, y a medida que aumenta la información, se separan cada vez menos bloques (todos fusionados), de modo que el conjunto ponderado y de búsqueda se puede utilizar para la compresión de la ruta. Mejorar la eficiencia.
  • ¿Por qué la suma del intervalo se deja abierta y la derecha cerrada?
    Porque lo que queremos lograr es caminar del punto x al punto y, el peso del camino es la suma del intervalo. Si se usa un intervalo completamente abierto o completamente cerrado, se encontrará que cuando la ruta contiene múltiples puntos, no puede cubrir todo el intervalo definido, pero el intervalo medio abierto y medio cerrado está bien.

operando:

  • De hecho, la operación no es complicada, solo comprime el lado derecho, donde más que mantenerlo en general s[]puede ser una matriz de ruta de conjuntos disjuntos .
  • Nota: El s[x]representante de la sección de apertura y cierre izquierda y derecha ( x,f[x] ]y.
  • Para cosas más específicas, eche un vistazo al siguiente diagrama o al código final (también hay comentarios).

la complejidad:

¿Es una complejidad lineal?

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

Código

//https://vjudge.net/problem/HDU-3038
#include <cstdio>

//设当前节点为 x 
//f: 指向的父节点 (f>x) 
//s: 区间 (x,f] 的和 (左开右闭)
int f[200005],s[200005];
int n,m,a,b,fa,fb,z,ans;

int Fa(int x)
{
    
    
	if (f[x]!=x) {
    
    
		int tmp=f[x];
		f[x]=Fa(tmp);	//先压缩好父节点的路径,维护好其 s[] 值后才能计算当前节点的 s[] 值
		s[x]+=s[tmp];
	}
	return f[x];
}

void init() {
    
    
	ans=0;
	for (int i=0; i<=n; i++) {
    
    	//注意从 0 开始,因为开区间,会用到 0
		f[i]=i;
		s[i]=0;
	}
}

int main()
{
    
    
	while (scanf("%d%d",&n,&m)!=EOF) {
    
    
		
		init();
	
		while (m--) {
    
    
			scanf("%d%d%d",&a,&b,&z);
			a--;
			fa=Fa(a);
			fb=Fa(b);
			
			if (fa==fb) {
    
    
				ans+=(s[a]-s[b]!=z);	//判断是否失败
			}
			else {
    
    
				f[fa]=fb;
				s[fa]=z+s[b]-s[a];	//向量加减得到
			}
		}
		
		printf("%d\n",ans);
	}
	return 0;
}

Preguntas complementarias

Puede echar un vistazo a kuangbin y consultar la lista de preguntas. Grabar mi hoja de preguntas

Cadena alimentaria POJ-1182

//https://vjudge.net/problem/POJ-1182
#include <cstdio>
#define N 50005

int f[N];	//并查集 
int g[N];	//与父亲的关系 (0:x=f 1:x>f 2:x<f) 
int ans,n,k,D,a,b,fa,fb,p;

int Fa(int x)
{
    
    
	if (f[x]!=x) {
    
    
		int tmp=f[x];
		f[x]=Fa(tmp);
		g[x]=(g[x]+g[tmp])%3;
	}
	return f[x];
}

void init()
{
    
    
	ans=0;
	for (int i=1; i<=n; i++) {
    
    
		f[i]=i;
		g[i]=0;
	}
}

int main()
{
    
    
	scanf("%d%d",&n,&k);
	init();
	while (k--) {
    
    
		scanf("%d%d%d",&D,&a,&b);
		
		if (a>n || b>n) {
    
    
			ans++;
			continue;
		}
		
		p=(D==2);	//a->b = p
		
		fa=Fa(a);
		fb=Fa(b);
		if (fa==fb) {
    
    
			ans+=((g[a]-g[b]+3)%3!=p);
		}
		else {
    
    
			f[fa]=fb;
			g[fa]=(p+g[b]-g[a]+3)%3;
		}
	}
	printf("%d\n",ans);
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/jackypigpig/article/details/113348863
Recomendado
Clasificación