Luo destino Valle P4316 rana (probabilidad DP / DP + desea clasificación topológica)

tema de fondo

Con el lanzamiento de la nueva versión de Baidu espacio, Blog rana mascota para completar su misión, para encontrar un nuevo hogar.

título Descripción

Zhang da NN N puntos mm m aristas del grafo acíclico dirigido, el punto de partida es . 11 1 final de NN n-, cada borde tiene una longitud, y a partir del punto de partida para llegar a todos los puntos, todos los puntos son también somos capaces de llegar al final.

Frog desde el punto de partida, hacia el final. se alcanza Cada vértice, si el nodo tiene KK K de los bordes del artículo, rana puede seleccionar cualquier punto lejos del borde, y a cada lado de la probabilidad 1K \ frac. 1} {K} { K . 1 . Ahora rana les gustaría saber, desde el principio hasta el final de un camino a través del cual la longitud total de las expectativas es ¿cuánto?

Formato de entrada

La primera línea de entrada de dos números enteros, que representa el número de puntos de la figura NN n-número de lados y mm m.

De 22 es 2 a (m +. 1) (m +. 1) ( m + . 1 ) filas, teniendo cada fila tres enteros U, V, Wu, V, W U , V , W, indica la presencia de una de Uu U apuntando vv v longitud WW W dirigida borde.

Formato de salida

Una línea de salida número real representa la respuesta, redondeado a dos decimales.

entrada y salida de la muestra

Entrada # 1
4 4 
1 2 1 
1 3 2 
2 3 3 
3 4 4
Salida # 1
7,00 

y antes AtCoder esa pregunta es muy similar, pero el problema es ya punto de orden descendente número de acuerdo a la fila topología, por lo que puede atravesar directamente de mayor a menor, y este problema tuvo que ordenar dp borde lateral. DP [i] n el camino representante de i a una longitud deseada, la ecuación de transferencia: dp [i] = (Σdp [k] + borde [i, k]) / grado [i], donde i k es un borde final, el borde [i, k] es una longitud de borde K a i, grado [i] es una i en grados. Comenzando desde el punto final a la necesidad para el anti recursiva la figura, mientras que dos de las matrices de memoria, fuera matriz como con la ecuación de transferencia, OUT1 de la matriz como una clasificación topológica (no aparentemente dos matrices QUQ).
#include <bits / STDC ++ H.>
 #define N 100005
 #define M 200005
 el uso de  espacio de nombres STD;
 int n-, m, cabeza [N], Ver [M], Edge [M], el siguiente [M], TOT = 0 ;
 doble DP [N];
 int  oUT [N] = { 0 }, OUT1 de [N] = { 0 }; // oUT [i] i representa el punto de la (original, no el anticuerpo anti FIG) 
anular el Agregar ( int X, int Y, int Z) 
{ 
    Ver [ ++ TOT] = Y; Edge [TOT] = Z; 
    la Siguiente [TOT] = cabeza [X], la cabeza [X] = TOT; 
} 
void Proceso () 
{
    cola             {< Int > q; 
    q.push (n); 
    dp [n] = 0 ; 
    mientras que (q.size ()) // 拓扑排序
    {
         int pre = q.front (); 
        q.pop (); 
        int i;
        para (i = cabeza [pre]; i; i = Siguiente [i]) 
        { 
            int y = Ver [i], z = borde [i]; 
            dp [y] + = (dp [PRE] + z) * 1,0 / fuera [y];
            si (--out1 [y] == 0 ) // 拓扑排序条件

            }
                q.push (y); 
        } 
    } 
} 
Int main () 
{ 
    cin >> n >> m;
    int i;
    para (i = 1 ; i <= m; i ++ ) 
    { 
        int x, y, z; 
        scanf ( " % d% d% d " , y x, y y, y z); 
        añadir (y, x, z); // 逆推建反图
        fuera [x] ++ ; 
        OUT1 [x] ++ ; 
    } 
    Proceso (); 
    printf ( " % .2lf " , dp [ 1 ]);
    volver  0 ; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/lipoicyclic/p/12548153.html
Recomendado
Clasificación