hdu6026 Dijkstra

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

Generalmente destinado a la pregunta: Dado un gráfico, para que le dicen árbol de borrado, de tal manera que cada punto de la distancia es el camino más corto al punto original de 0 0. De hecho, el árbol del camino más corto.

PROVE 1: Para cada nodo siempre que sabemos cómo muchos caminos a su distancia es la longitud más corta, denotado por cnt, a continuación, bordes hay cnt conectado al nodo precursor, en primer lugar, para asegurar que cada punto 0 se puede llegar, por lo que el precursor de todos los nodos debe ser capaz de alcanzar, es decir, su d debe existir, por lo que acaba de eliminar cnt 1-bordes, dejando un árbol de ruta más corta pueden ser construidos. Para cada nodo, después de la exploración de acuerdo con nuestra regla del producto de multiplicar el número de programas.

Los siguientes tres casos para demostrar que es un árbol

①, supongamos que un nodo conectado a un nodo p q, hay dis [q] <dis [p] + borde [p] [q], entonces esto constituye un círculo, quitamos el borde [p] [q ] se convierte en acíclico, y puede alcanzar desde 0 estos dos nodos para el otro lado, por lo que podemos eliminar.

②, un nodo se supone que no está unido a p nodo q, hay dis [q] = dis [p] + borde [p] [q], sabemos que tal prueba de la p-tiene solamente una, porque nos Edge nuestro algoritmo ha borrado solamente la siguiente. Por lo tanto, este caso no constituye un círculo.

③, un nodo se supone que no está unido un nodo p q, hay dis [q]> dis [p] + borde [p] [q], y DIS [q] q es la longitud más corta de contradicciones.

Para resumir: mapa después de la finalización del algoritmo se ha convertido en un árbol.

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 0x3f3f3f3f
 20  const  int maxN = 100 ;
21  const  int mod = 1e9 + 7 ;
22  int n, m, t;
23  int d [maxN],
borde [maxN] [maxN]; 24 void dijkstra ( int src)
 25  {
 26      priority_queue <P, vector <P>, mayor <P>> q;
27      f (i, 0 , n- 1 ) d [i] = inf;
28      d [src] = 0 ;
29      q.push (pf ( 0 , src));
30      , mientras que (! Q.empty ())
 31      {
 32          P ahora = q.top ();
33          q.pop ();
34          int u = now.second;
35          si (d [u] <now.first) continuar ;
36         f (i, 0 , n- 1 )
 37          {
 38              si (borde [u] [i] && d [i]> d [u] + borde [u] [i])
 39              {
 40                  d [i] = d [ u] + borde [u] [i];
41                  q.push (pf (d [i], i));
42              }
 43          }
 44      }
 45  }
 46  int main ()
 47  {
 48      // freopen ( "input.txt", "r", la entrada estándar);
49      // freopen ( "output.txt", "w", stdout); 
50      std :: ios :: sync_with_stdio ( falsa);
51      , mientras que (exploración (n) =! EOF)
 52      {
 53          Char c;
54          f (i, 0 , n- 1 )
 55              f (j, 0 , n- 1 )
 56              {
 57                  scanf ( " % c " , y c);
58                  borde [i] [j] = c- ' 0 ' ;
59              }
 60              ll ans = 1 ;
61              dijkstra ( 0 );
62              f (i, 1 , n- 1 )
 63              {
 64                  int cnt = 0 ;
65                  f (j, 0 , n- 1 )
 66                  {
 67                      si (borde [i] [j] && (d [j] + borde [j] [i] == d [i])) cnt ++ ;
68                  }
 69                  ans = (ans * cnt)% mod;
70              }
 71              pf ( " % LLD \ n " , ans);
72      }
 73      
74   }

 

 

Supongo que te gusta

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