Rana

Descripción
Hay una rana Freddy llamado sentado en una piedra en el centro del lago, y de repente se encontró con otra rana (su nombre es Fiona) sentado en una piedra sobre otra. Él quiere encontrar a su pasado, pero a causa del agua sucia, todo está lleno de turistas protector solar, por lo que decidió saltar, en lugar de utilizar los viajes.
Ominosamente Fiona piedra de su distancia pudo saltar más allá del alcance. Así Freddy considere el uso de algunas otras piedras como estación de relevo, por lo que puede saltar distancia relativamente pequeña (tal vez para saltar muchas veces) para encontrar Fiona.
Para saltar como este en una fila, es evidente una vez que Freddy puede saltar distancia debe ser, al menos, la distancia y la mayor distancia entre la cuerda de la piedra. Así, la trayectoria, la distancia entre las piedras entre LeapFrog (distancia de rana, también conocida como distancia minmax humano) se define como donde la piedra Freddy para saltar de piedra Fiona situado, la distancia mínima necesaria para saltar.
Apedrearte, donde Freddy, piedra Fiona encuentra, así como coordinar todas las otras piedras en el lago, su tarea consiste en calcular la distancia entre salto entre Freddy y piedra mentiras Fiona.
Entrada
La entrada contiene varios datos de prueba. La primera columna de cada datos de prueba tiene un número entero n, representa el número de piedras (2 <= n <= 200 ). Los siguientes n columnas cada columna tiene dos números enteros xi, yi (0 <= xi , yi <= 1,000) representativa de las coordenadas de los i-ésimo canicas. En el que el primero se encuentra piedra Freddy, piedra segundos dientes Fiona se encuentra en las otras n-2 piezas de piedra está vacía.
Después de cada prueba hay una columna en blanco, cuando n = 0, representante del extremo de entrada. Consulte el Ejemplo de entrada.
De salida
para cada conjunto de datos de prueba, que es una salida de varios grupos de datos de prueba, y una distancia de salto.
También una columna en blanco en cada grupo después de los datos de prueba de salida. Refiérase a la Salida de muestra.
La entrada de la Muestra
2
0 0
3 4

3
17 4
19 4
18 5

0
Salida de muestra
Escenario # 1
de la rana Distancia = 5,000

Escenario # 2
de la rana Distancia = 1,414

Sol:

Resumió el problema: encontrar un punto de partida para el peso máximo en el lado del punto final de la ruta de menor, el valor de salida. A continuación, un punto de partida, el punto final de una pluralidad de trayectorias desde 5,1 a 5, pero el máximo en el lado derecho de este camino es 1-3-2-1 6, es el más pequeño en todos los caminos.

Solución: Primero presione el lado derecho después del gran éxito desde la infancia, el orden de clasificación lado positivo, en una colección, cada uno añadiendo un borde para determinar si los puntos de inicio y fin en un conjunto. Si en, indica los puntos de inicio y fin se han comunicado, el valor actual de la parte derecha de la respuesta. Como se muestra arriba, antes de añadir 2-5, el lado derecho es 1, además de 1-3, el lado derecho es tres, más 2-3, el lado derecho es 4, además de 1-3, el lado derecho es 6, el punto de partida en este momento 5 tiene un extremo en comunicación con, el caso 6 es la respuesta.

Código es el siguiente:

#include <bits / STDC ++ h.>
 usando  espacio de nombres std;
int n, c, qaq;
duplicar un [ 2010 ], b [ 2010 ], SNA;
struct kkk {
     int x, y; doble v; 
} bb [ 1000000 ]; int tot;
bool cmp (kkk a, kkk b) 
{ retorno av < bv;}
 int fa [ 2010 ];
int  get ( int x) { retorno fa [x] == x fa [x]: fa [x] =? get (fa [x]);}
 doble vuelta ( intx, int y) 
{ 
    doble dx = a [x] - una [y];
    doble dy = b [x] - b [y];
    retorno sqrt (dx * dx + dy * dy); 
} 
Int main () 
{ 
    mientras que ( 1 ) 
    {
         ++ qaq; 
        scanf ( " % d " , y n);
        si (n == 0 ) descanso ; 
        tot = 0 ;
        para ( int i = 1 ; i <= n; i ++ ) 
        fa [i]= I;
        para ( int i = 1 ; i <= n; i ++ ) 
        scanf ( " % lf% LF " , & a [i], y b [i]); 
     
        para ( int i = 1 ; i <= n; i ++ )
         para ( int j = i + 1 ; j <= n; j ++ ) 
            bb [ ++ tot] .x = i, bb [tot] .y = j, bb [tot] .v = turno (i, j); 
   
        sort (bb + 1 , bb + tot + 1 , cmp); 
    
        para ( int i = 1 ; i <= tot; i ++ si)
             ( Get (bb [i] .x) =! Get (bb [i] .y)) 
            { 
                f bis [ get (bb [i] .x)] = get (bb [i] .y);
                si ( obtener ( 1 ) == get ( 2 )) 
                { 
                    ans = bb [i] .v;
                    romper ; 
                } 
            } 
        Printf ( " Escenario #% d \ nFrog Distancia =% .3lf \ n \ n " , qaq, ans); 
    } 
    Volver  0 ; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/cutepota/p/12510287.html
Recomendado
Clasificación