título Descripción
Si ambos números enteros positivos y es un número primo, entonces los dos números enteros positivos llamados "socio prime", tales como 2 y 5, 6 y 13, que pueden ser aplicados a las comunicaciones cifradas. Ahora la contraseña que aprender a diseñar un programa a partir de N existente (N es un número par) enteros positivos escojan primer socio de varios pares", la selección de programas tan diversos como hay cuatro números enteros positivos: 2,5, 6,13, 5 y 6, si un grupo consigue solamente en un conjunto de "socio de primera", mientras que el 2 y el 5,6 y el 13 consisten obtuvieron dos "socio de primera", puede estar compuesto por "principal socio" más el programa se llama "la mejor solución", por supuesto, usted quiere averiguar la contraseña de aprender "las mejores prácticas".
entrada
Hay un número par positivo N (N≤100), indica el número de números naturales a ser seleccionado. números específicos dados más adelante, en el rango [2,30000].
exportación
Una salida entero K, que obtuvo "la mejor solución" que consiste en "socio primordial" de un número.
Introduzca una descripción
1, la entrada de un número positivo incluso n
2, n números enteros de entrada
salida Descripción
número determinado de "mejores prácticas" componente "primer socio" de.
entrada
4
2 5 6 13
exportación
2
pensamiento
conceptos relacionados
Bipartito gráfico
bipartito gráfico es en realidad en un gráfico de todos los puntos se pueden dividir en dos grupos, el mismo grupo no tiene bordes, todas las partes han cruzado los dos grupos. Precisamente: los vértices de un gráfico se divide en dos conjuntos disjuntos U y V, y de tal manera que cada lado están conectados respectivamente a U, V de vértices, si la presencia de esta división, este llamado gráfico bipartito en la figura.
Además hay una definición equivalente gráfico bipartito es: la figura no contiene una "lados impares contienen anillos".
Coincidencia de
juego gráfico bipartito es un conjunto de bordes en la que dos lados hay vértice común. Definimos son:
borde coincidente, punto de partido, igualación no borde, puntos no coincidentes.
La figura: Si vinculado 1-2, 5-4 están conectados, está conectado a 7-6. Obviamente los bordes 1-2, 5-4 lado, para que coincida con el borde lateral 7-6, 1,2,4,5,6,7 punto de coincidencia. Los restantes no coincidentes y de borde no coincidente puntos.
coincidente máximo
para este partido coincidente es decir, el número máximo de bordes en la figura coincide con una contenida en la fig. La cifra es la máxima adaptación como:
Con mucho, la mayor coincidencia puede no ser único.
Un complemento perfecto para
un partido si un gráfico, todos los vértices son el punto de partido, entonces es una combinación perfecta. La figura es una combinación perfecta. Obviamente, el complemento perfecto debe ser el partido más importante (punto de partido, ya sea perfecta se han emparejado, añadir un nuevo conflicto voluntad lateral a juego con la parte coincidente existente). Pero no todos los mapas hay una coincidencia perfecta.
Ruta alternativa
de un punto de salida no coincide, pasa a través de la igualación no borde, igualación de bordes, camino de igualación no borde formado ...... llamada ruta alternativa. La figura 2-> 1-> 8-> 7 que es un camino alternativo.
Aumentar ruta
desde un punto no coinciden, tomar la ruta alternativa, si no se llega a otro punto de partido, esta ruta alternativa se llama (ruta agumenting) trayectoria de aumento. La figura 1-> 2-> 3-> 6-> 7-> 8 es los caminos uno de aumento.
propiedades Aumento de Path
definidos por el camino siguiente tres conclusiones aumentar pueden introducirse (siempre que la trayectoria de la corriente P, la coincidencia de la M actual):
. 1, P es la longitud de la trayectoria debe ser un número impar, el primer borde lateral y la última no está M pertenece, como un conjunto de dos puntos finales pertenecen a dos, y no a juego.
2, P se puede obtener a través de la operación inversa para que coincida con un M más grande'.
3, M es un juego máximo de G si y sólo si aumentada con respecto a la trayectoria M no existe.
algoritmo húngaro: la búsqueda de la ruta de coincidencia máxima de aumento
1, M se establece en NULL.
2, para encontrar un P trayectorias de aumento, una mayor partido M 'en lugar de la operación mediante la negación de M 3, se repite hasta que el camino no se puede encontrar una amplia por hasta 2 operaciones.
Buscando aumentar algoritmo del camino
que utilizamos el método DFS de encontrar una trayectoria de aumento, a partir de la parte X vértices uno u inigualables, busca un punto de acceso v no adyacentes (v debe ser el vértice Y). Para v, dos posibilidades:
1, v si no coincide, han encontrado una trayectoria de aumento.
2, si v tiene, la coincidencia se toma vértice v W (w X debe ápice), el borde (w, v) es la partida actual, de acuerdo con la idea de "invertida", a (w, v) modificado es inigualable, (u, v) se ajusta para que coincida con la condición de lograrlo es mirar si el nuevo punto de partida desde w para encontrar una trayectoria de aumento de P'. Si bien, el UV-P 'es un camino para la extensión de u origen.
Código es el siguiente
. 1 #include <la iostream> 2 #include <CString> 3. #Include <vector> 4. El uso de espacio de nombres STD; . 5 const int N = 100 , M = 60.001 ; . 6 Vector < int > G [N]; // bipartito figura . 7 int pre [N], los nums [N]; // corriente correspondiente al punto de coincidencia par-impar, el número de entradas . 8 BOOL la esPrimo [M], en Flag [N]; // si la tabla de correspondencia número primo, un punto de coincidencia puede ser igualada 9 @ Euler tamiz tabla tabla se establece la correspondencia de los números primos 10 void primeTab () { . 11 int prime [M], CNT =0 ; 12 Primer [cnt ++] = 2 ; 13 memset (esPrimo, verdadero , sizeof (esPrimo)); 14 esPrimo [ 0 ] = esPrimo [ 1 ] = false ; 15 para ( int i = 4 ; i <M; i + = 2 ) 16 esPrimo [i] = false ; 17 para ( int i = 3 ; i <M; i + = 2 ) { 18 si (esPrimo [i]) 19 Primer [CNT ++] = I; 20 es para ( int J = 0 ; J <CNT && I * Prime [J] <M; ++ J) { 21 está la esPrimo [I * Prime [J]] = false ; 22 es SI (I primer% [J] == 0 ) 23 es PAUSA ; 24 } 25 } 26 es } 27 // ruta de búsqueda de aumento de la profundidad primero, para encontrar una coincidencia máxima 28 BOOL DFS ( int n-) { 29 para ( int I = 0 ; I < G [n-] .size (); ++ I) { 30 int X = G [n-] [I]; 31 es SI (En Flag [X]) // Si nums [X] es nums [n] los puntos emparejados, ahora tiene que hacer 32 Continuar ; 33 es En Flag [X ] = true ; // los nums [X] se convierte en nums [N] de un punto de coincidencia 34 es // los nums [X] no coincide || nums [x] ha sido igualada, pero puede ser permitido para buscar un punto de coincidencia de manera que el nuevo punto de Teng coincidente los nums [X] 35 IF (pre [X] == - 1. || DFS (pre [X])) { 36 pre [X] = N-; // a nums [n] coincide con los nums [X] 37 [ retorno a la verdadera ; 38 es } 39 } 40 de retorno en false ; 41 es } 42 es int main () { 43 es int n-; 44 es primeTab (); // build número primo tabla de correspondencia 45 / * 46 está preasignado de forma predeterminada en lugar de 0 hasta -1, porque los nums pre almacenan en el impar subíndice. 47 Si el valor por defecto pre Fu 0 pre [i] 0 tiene dos significados =: 48 pre [I] se asigna a ninguna; (2) pre mapeo [I] para nums [0] (1.). 49 contradictoria, se le asigna -1. 50 * / 51 es Memset (pre, - 1. , El sizeof (pre)); 52 es el tiempo (CIN >> n-) { 53 es para ( int I = 0 ; I <n-; ++I) 54 es CIN >> los nums [I]; 55 para ( int I = 0 ; I <n-- 1. ; ++ I) 56 es para ( int J = I + 1. ; J <n-; ++ J) 57 es SI ( la esPrimo [los nums [I] + los nums [J]]) 58 los nums [I] y 1. G [I] .push_back (J): G .push_back (I) ;? [J] // construir un método de la lista bipartita gráfica, impares un punto de coincidencia puede ser un número par de enlaces 59 int ANS = 0 ; 60 para ( int J = 0 ; J <n-; ++J) { 61 es Memset (En Bandera, a falso , el sizeof (En Flag)); 62 es SI (DFS (J)) 63 es ++ ANS; 64 } 65 COUT ANS << << endl; 66 para ( int I = 0 ; I < n-; i ++) { // relación clara gráfico bipartito de mapeo 67 G [I] .clear (); 68 } 69 Memset (pRE, - 1. , el sizeof (pre)); // Borrar la corriente correspondiente al punto de coincidencia de par-impar 70 } 71 }