hdu2063 húngaro algoritmo bipartito gráfico a juego de problemas Soluciones

enlaces a los temas: http://acm.hdu.edu.cn/showproblem.php?pid=2063

algoritmo de trayectoria de aumento Hungría se basa en un algoritmo recursivo, aplicado al problema gráfico bipartito coincidente. Este problema es un algoritmo húngaro para la máxima coincidencia de aplicación gráfico bipartito. Para V1 una, que se ajustará en el punto x, se puede considerar que el punto de él un V2 potencial y en un objeto coincidente, si este punto no hay ninguna coincidencia sobre o hacerle y encontrado un nuevo objetos con las características determinadas pueden ser y como un oficial de x igualar.

Este uso pregunta I es la matriz de adyacencia, cada búsqueda aumentar tiempo camino es O (| V | ^ 2), por lo que la complejidad de tiempo total es O (| V | ^ 3), la complejidad espacio total es O (| V | ^ 2), en caso de aplicarse, a continuación, la lista de adyacencia tiempo total complejidad es O (| V || E |), la complejidad espacial es O (| E | + | V |).

Código es el siguiente:

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 0x7ffffff
 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  int k, n, m;
28  const  int maxN = 1e3;
29  int g [maxN] [maxN]; 
30  int m_girl, n_boy;
31  int partido [maxN], reserve_boy [maxN]; // 匹配结果在中partido 
32  boolDFS ( int x) // húngaro algoritmo: para x para encontrar una trayectoria de aumento, es decir, para encontrar un objeto coincidente 
33 es  {
 34 es      para ( int I = 1. ; I <= n_boy; I ++ )
 35      {
 36          IF (reserve_boy [I! ] && G [x] [i]) // niño i y niñas no son preservar objeto X puede ser igualada y i 
37 [          {
 38 es              reserve_boy [i] = 1. ; // niño predeterminado i, listo para dar x 
39              IF (partido! [i] || DFS (partido [i]))
 40              // hay dos casos, (1) el niño i sin objeto coincidente (2) objetos chicos apareados han intente sustituir el chico i objetos originales tanto un éxito i asignaron a poner X 
41 es              {
 42 es                 coincidir [i] = X; // i-ésimo niño par o directamente al objeto de sustituir X 
43 es                  el retorno  a la verdadera ;
 44 es              } 
 45           } 
 46 es      }
 47      de retorno  en false ; // niñas i emparejamiento falla 
48  }
 49  int main ()
 50  {
 51 es      // El freopen ( "input.txt", "R & lt", stdin);
 52 es      // El freopen ( "output.txt", "W", stdout); 
53 es      std :: :: iOS sync_with_stdio ( false );
 54 es      el tiempo (Scanf ( " % D " , y K) ==1 && k)
 55      {
 56          m_girl = read (), n_boy = read ();
57          mem (g, 0 );
58          mem (partido, 0 ); 
59          int u, v;
60          f (i, 1 , k)
 61          {
 62              U = read (), v = read ();
63              g [u] [v] = 1 ; // 邻接矩阵存边
64          }
 65          int suma = 0 ;
66          f (i, 1 , m_girl) //Mirando para cada par chica, la corriente buscan chica éxito después puede ser sustituido, pero será emparejado con éxito 
67          {
 68              MEM (reserve_boy, 0 );
 69              SI (DFS (I)) SUMA ++ ;
 70          }
 71 es          PF ( " % D \ n " , SUM);
 72      }
 73 es }

 

Supongo que te gusta

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