HDU 4496-D-City (disjuntos-set)

D-City

Tiempo límite: 2000/1000 MS (Java / Otros) Límite de memoria: 65535/65535 K (Java / Otros)
sumisión total (s): 6470 admitirá la presentación (s): 2213

Descripción del problema

Luxer es un mal tipo. Él destruye todo lo que se encontraba.
Un día fue a Luxer D-ciudad. D-ciudad tiene N D-puntos y M D-líneas. Cada línea D se conecta exactamente dos puntos D. Luxer destruirá todas las líneas D. El alcalde de D-ciudad quiere saber cuántos bloques conectados de D-ciudad se fueron después de la destrucción de los primeros Luxer K líneas D en la entrada.
Dos puntos están en los mismos bloques conectados si y sólo si se conectan entre sí directamente o indirectamente.

Entrada

Primera línea de la entrada contiene dos enteros N y M.
Entonces siguientes M líneas contienen cada uno 2 enteros separados por un espacio U y V, lo que denota una línea D.
Limitaciones:
0 <n <= 10000
0 <m <= 100000
0 <= u, v <N.

Salida

M líneas de salida, la línea i-ésima es la respuesta después de eliminar los primeros bordes i en la entrada.

Ejemplo de entrada

5 10
0 1
1 2
1 3
1 4
0 2
2 3
0 4
0 3
3 4
2 4

Ejemplo de salida

1
1
1
2
2
2
2
3
4
5

Insinuación

El gráfico dado en entrada de la muestra es un gráfico completo, que cada par de vértice tiene un borde de conexión ellos, así que sólo hay 1 bloque conectado al primero.
Las 3 primeras líneas de salida son 1s porque después de eliminar los 3 primeros bordes de la gráfica, todos los vértices todavía conectados entre sí.
Pero después de eliminar los 4 primeros bordes de la gráfica, el vértice 1 se desconectará con otro vértice, y se convirtió en un bloque conectado independiente.
Continuar bordes de los bloques desconectados aumentaron borrar y, finalmente, se convirtió en el número de vértices, por lo que la última salida siempre debe ser N.

Descripción del problema
Lucas Se (Luxer) es realmente una mala persona. Él destruyó todo lo que conocía.
Un día, Lucas Se fue a la D-ciudad. D-ciudad tiene N puntos y la línea M D D. Cada D D línea que conecta dos puntos exactamente. Luxor destruirá toda la línea D. Alcalde D-ciudad después preguntándose Luxer destruido antes de la entrada D-línea K en la cantidad que queda conectado a los barrios D-ciudad.
Si y sólo si los dos puntos está conectado directa o indirectamente entre sí, que están conectados sólo en el mismo bloque.

El valor de entrada
de la primera línea de entrada contiene dos enteros N y M.
Entonces M filas que incluyen cada uno dos enteros separados por un espacio U y V, D representa una fila.
Intervalo:
0 <n <= 10000
0 <m <= 100000
0 <= U, V <N.

Salida
Salida M filas, la i-ésima fila i respuesta después de borrar lados frontales de entrada.

entrada de la muestra
. 5 10
0. 1
. 1 2
. 1. 3
. 1. 4
0 2
2. 3
0. 4
0. 3
. 3. 4
2. 4

Ejemplo de salida
. 1
. 1
. 1
2
2
2
2
. 3
. 4
. 5

Consejo:
entrada de la muestra la figura dada es una vista completa de cada vértice tiene un borde de conexión juntos, por lo que sólo uno está conectado a un bloque de inicio.
La salida de la primera tres actos 1, ya que después de los primeros tres lados gráficos de borrado, todos los vértices todavía están juntos.
Sin embargo, antes y después de los cuatro lados de la pauta eliminan vértice 1 desconectado del otro vértice, y un bloque de conexión independiente.
Continuar para eliminar el borde, aumentando el bloque se desconecta, se convierte en el último número de vértices, y por lo tanto debe ser siempre la última salida es N.

tema Enlace

efecto Título: dados ciudades N y para eliminar el lado M, lo que significa que N está ahora conectada a otra por una carretera de la ciudad M (las figuras no están necesariamente a la comunicación), y luego da salida a la i-ésima tiene a su vez varios demolición área de comunicación.
Ideas resolución de problemas: Este título se examina la disjuntos-set, y diferente del pasado es que podemos salvar al revés, comenzando no están conectados entre sí, y la última comunicación de la subida, ya que desea tiempos de salida m, por lo que establecemos a ans matriz, American National Standard de volver a empezar, tal como n, porque queremos incluso hacia atrás, por lo que el inicio no es ciertamente en comunicación entre sí, entonces incluso el juez, una vez más, si el padre es capaz de comunicarse con los diferentes nodos, Respuesta-, si el padre es el mismo nodo continuar incluso, a su vez, finalmente, el valor de salida de la American National Standard. Código de CA:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int _max=1e5+50;
struct node {int a,b;};
int f[_max],s[_max];
node ai[_max];
int main()
{
	int n,m;
	int getf(int);
	while(~scanf("%d%d",&n,&m))
	{ 
	  int a,b,cnt=1;;
	  for(int i=1;i<=m;i++)
	    scanf("%d%d",&ai[i].a,&ai[i].b);
	  for(int i=0;i<n;i++)
	      f[i]=i;//初始化并查集
	  int sum=n;	  
	  for(int i=m;i>0;i--)
	  {
		s[i]=sum;
		int x=getf(ai[i].a);
		int y=getf(ai[i].b);
		if(x!=y)//判断父亲节点是否相同
		{
			sum--;
			f[y]=x;
		}
	  }
	  for(int i=1;i<=m;i++)
	    printf("%d\n",s[i]);
	}
	//system("pause");
	return 0;
}
int getf(int v)//寻找父亲节点
{
	if(f[v]==v)
	  return v;
	else
	{
		f[v]=getf(f[v]);
		return f[v];
	}  
}
Publicado 38 artículos originales · ganado elogios 1 · vistas 1084

Supongo que te gusta

Origin blog.csdn.net/aezakmias/article/details/104877940
Recomendado
Clasificación