Junta hdu1213 disjuntos-set

enlaces a los temas: http://icpc.njust.edu.cn/Problem/Hdu/1213/

Una estructura de datos inconexos conjunto de apoyo a buscar y combinar, la operación en el bosque, la compresión de caminos, y se combinan para encontrar la complejidad del tiempo son casi constante. Y comprobar la función más básica es establecer un conjunto de los llamados "relación" entre los diferentes puntos, y la consulta de si los dos están relacionados. Y un conjunto de características es cheque relación transitiva Vectorial, como A-> B B-> C, hay A-> C, no es particularmente entre los vectores de transferencia de imágenes? En muchos casos, la aplicación y comprobar el conjunto están relacionados con esta propiedad. Presidente y comprobar el segmento de código conjunto comparable de lo orz problema con la placa hdu1213-árbol de amable, de la siguiente manera:

1 #include <bits / STDC ++ h.>
 2  usando  espacio de nombres std;
3 typedef unsigned int ui;
4 typedef largo  largo ll;
5 typedef unsigned largo  largo ULL;
6  #define pf printf
 7  #define mem (a, b) memset (a, b, sizeof (a))
 8  #define prime1 1E9 + 7
 9  #define prime2 1E9 + 9
 10  #define pi 3,14159265
 11  #define LSON l, mediados, tr << 1
 12  #define rson mitad + 1, r, rt << 1 | 1
13  #define Scand (x) scanf ( "% LLF", y x) 
 14  #define f (i, a, b) for (int i = a; i <= b; i ++)
 15  #define de exploración (a) scanf ( "% d", y a)
 16  #define pf (a, b) make_pair ((a), (b))
 17  #define P par <int, int>
 18  #define dbg (args) cout << # args << ":" << args << endl;
19  #define inf 0x3f3f3f3f
 20 inline int read () {
 21      int ans = 0 , w = 1 ;
22      Char ch = getchar ();
23      , mientras que (!(ch == ' - ' ) w = - 1 ; ch = getchar ();}
 24      mientras que (isdigit (ch)) ans = (ANS << 3 ) + (ans << 1 ) + CH- ' 0 ' , ch = getchar ();
25      de retorno ans * w;
26  }
 27  const  int maxN = 1E6 + 10 ;
28  int n, m, t;
29  int f [maxN];
30  conjunto < int > s;
31  void init ()
 32  {
 33     F (I, 1. , N-) F [I] = I;
 34 es      s.clear ();
 35  }
 36  int Find ( int X)
 37 [  {
 38 es      SI (X == F [X]) de retorno X;
 39      F [ X] = Encuentra (F [X]); // camino compresor, o puede constituir una extremadamente desigual árbol 
40      de retorno F [X];
 41 es  } 
 42 es  vacío de Unión ( int X, int y)
 43 está  {
 44 es      int = FX Find (X);
 45      int FY = Encuentra (Y);
 46 es      SI(FX == FY) de retorno ; // tiene el mismo árbol 
47      el otro  
48      {
 49          F [FX] = AF;
 50          // no poner un árbol en el árbol de B se encuentra en la raíz conectado la raíz del árbol, se combinaron para lograr 
51 es       } 
 52 es  }
 53 es  
54 es  int main ()
 55  {
 56 es      // el freopen ( "input.txt", "R & lt", stdin);
 57 es      // el freopen ( "output.txt", "W ", stdout); 
58      std :: :: iOS sync_with_stdio ( false );
 59      T = Read ();
 60      int a, B;
 61 es      el tiempo (T-)
 62 es      {
 63 es          n- = Read (), m = Read ();
 64          el init ();
 65          F (I, . 1 , m) A = Read (), B = Read (), de Unión (A, B);
 66          f (i, . 1 , n) s.insert (Buscar (I)); // ver cuántas independiente árbol 
67          PF ( " % D \ n " , s.size ());
 68      }
 69   }

 

Supongo que te gusta

Origin www.cnblogs.com/randy-lo/p/12559969.html
Recomendado
Clasificación