Significado del tema: Para resumir: elimine el borde en cualquier ruta más corta y luego encuentre la ruta más corta más grande
Idea: 0.0
1 #include <bits / stdc ++. H> 2 usando el espacio de nombres std; 3 const int inf = 0x3f3f3f3f ; 4 const int maxn = 1e3 + 10 ; 5 int vis [maxn]; int dis [maxn]; 6 int corte [maxn] [maxn]; 7 int partido [maxn]; 8 struct node 9 { 10 int v, w, nxt; 11 } G [ 1000010 ]; int cabeza [maxn]; int num; 12 void add ( int u, int v, int w) 13 { 14 G [++ num] .v = v; G [num] .w = w; G [num] .nxt = head [u]; head [u ] = num; 15 } 16 nulo SPFA1 () 17 { 18 cola < int > q; 19 memset (dis, inf, sizeof (dis)); 20 memset (vis, 0 , sizeof (vis)); 21 q.push ( 1 ); 22 vis [ 1 ] = 1 ; 23 dis [ 1 ] = 0 ; 24 while (! Q.empty ()) { 25 int u = q.front (); 26 q.pop (); 27 vis [u] = 0 ; 28 para ( int i = cabeza [u]; i; i = G [i] .nxt) { 29 int v = G [i] .v, w = G [i] .w; 30 if (dis [v]> dis [u] + w) { 31 dis [v] = dis [u] + w; 32 coincidencias [v] = u; 33 if (! Vis [v]) { 34 q.push (v); 35 vis [v] = 1 ; 36 } 37 } 38 } 39 } 40 } 41 nulo SPFA2 () 42 { 43 cola < int > q; 44 memset (dis, inf, sizeof (dis)); 45 memset (vis, 0 , sizeof (vis)); 46 q.push ( 1 ); 47 vis [ 1 ] = 1 ; 48 dis [ 1 ] = 0 ; 49 while (! Q.empty ()) { 50 int u = q.front (); 51 q.pop (); 52 vis [u] = 0 ; 53 para ( int i = cabeza [u]; i; i = G [i] .nxt) { 54 int v = G [i] .v, w = G [i] .w; 55 if (corte [u] [v]) continuar ; 56 if (dis [v]> dis [u] + w) { 57 dis [v] = dis [u] + w; 58 if (! Vis [v]) { 59 q.push (v); 60 vis [v] = 1 ; 61 } 62 } 63 } 64 } 65 } 66 int main () 67 { 68 int n, m; 69 scanf ( " % d% d " , & n, & m); 70 para ( int i = 1 ; i <= m; i ++ ) { 71 int u, v, w; 72 scanf ( " % d% d% d ", & u, & v, & w); 73 agregar (u, v, w); 74 add (v, u, w); 75 } 76 SPFA1 (); 77 int ahora = n; 78 int ans = dis [n]; 79 while (partido [ahora]) { 80 int u = ahora; int v = partido [ahora]; 81 corte [u] [v] = corte [v] [u] = 1 ; 82 SPFA2 (); 83 corte [u] [v] = corte [v] [u] = 0 ; 84 ans = max (ans, dis [n]); 85 ahora =partido [ahora]; 86 } 87 printf ( " % d \ n " , ans); 88 devuelve 0 ; 89 }