http://poj.org/problem?id=1797
Significado de las preguntas: n ciudades, m borde bidireccional de cada lado tiene el derecho a llevar el valor del peso, preguntó n Carga máxima 1..
Solución: inicializado a 0, se selecciona de un gran pesos de las aristas, Actualización: si dis [j] <min (dis [pos], ma [pos] [j]) de modo que la actualización j carga de peso alcanza tan grande como sea posible.
// # incluir <bits / STDC ++. H> # include <cstdio> # include <cstring> # include <math> # include <algoritmo> #include <iostream> #include <string> #include <stdio.h> # include <cola> # include <pila> # include <mapa> # include <set> #include <string.h> #include <vector> #include <stdlib.h> using namespace std; typedef largo largo ll; #define int ll #define MOD 100 gcd #define (m, n) __gcd (m, n) rep #define (i, j, n) for (int i = j; i <= n; i ++) #define rojo (i, n, j) for (int i = n; i> = j; i--) #define ME (x, y) memset (x, y, sizeof (x)) // int lcm (int a, int b) {return a * b / gcd (a, b);} // ll quickpow (ll a, ll b) {ll ans = 1, mientras que (b) {if (b & 1) ans = ans * a mod%; b >> = 1, a = a * a mod%;} return ans;} // ans int euler1 (int x) {int = x; for (int i = 2; i * i <= x; i ++) si (x% i == 0) {Respuesta-= ans / i, mientras que (x % i == 0) x / = i;} if (x> 1) Respuesta-= American National Standard / x; ans de retorno;} // int const N = 1E7 + 9; int VIS [n], el primer [n], phi [N]; int euler2 (int n) {ME (vis, true); int len = 1; rep (i, 2, n) {if (vis [i] ) {prime [len ++] = i, phi [i] = i-1;} for (int j = 1; j <len && prime [j] * i <= n; j ++) {vis [i * prime [j]] = 0; si (% prime i [j] == 0) {phi [i * prime [j]] = phi [i] * prime [j]; break;} else {phi [i * prime [j]] = phi [i] * phi [prime [j]];}}} len retorno} #define INF 0x3f3f3f3f acos #define PI (-1) par pii #define <int, int> #define fi primera #define SE segundo #define LSON l, mediados, raíz << 1 #define rson mitad + 1, R, raíz << 1 | 1 #define pb push_back #define mp make_pair #define todos (v) v.begin (), V.END () tamaño #define (v) (int) (v.size ()) #define cin (x) scanf ( "% LLD", y x); int const N = 1e5 + 9; const int maxN = 1E3 + 9; const doble esp = 1e-6; int mi [maxN] sierra [maxN] [maxN] decir [maxN]; int n, m, cnt; Dijkstra vacío (int u) { rep (i, 1, n) { dis [c] = y [u] [c]; } vis [u] = 1; rep (i, 1, n-1) { pos int; int maxx = -INF; rep (j, 1, n) { if (! vis [j] && Maxx <dis [j]) { pos = j; Maxx = dis [j]; } } para [pos] = 1; rep (j, 1, n) { if (! vis [j] && min (des [pos], ma [pos] [j])> dis [j]) { DIS [j] = min (dis [enviar], MA [post] [j]); } } } } init void () { ME (a, 0); ME (ver, 0); } anulará solve () { en eso(); scanf ( "% LLD% LLD", y n, y m); rep (i, 1, m) { int u, v, w; scanf ( "% LLD% LLD% LLD", y u, y v, & w); en [u] [v] = en [v] [u] = max (en [v] [u], w); } dijkstra (1); tribunal << "Escenario" << << ++ cnt ":" << endl << dis [n] << endl << endl; } firmado principal () { en eso(); t int; cin >> t; mientras que (t -) { resolver(); } }
http://poj.org/problem?id=2253
Significado de las preguntas: una rana para saltar a otra roca, donde la rana, dada una roca n, de 1 a n, la distancia mínima requerida número mínimo de saltos?
Solución: Actualización: si dis [j]> max (dis [POS], pos [j]), de modo que los dis [j] llega a la distancia máxima de un mínimo
// # incluir <bits / STDC ++. H> # include <cstdio> # include <cstring> # include <math> # include <algoritmo> #include <iostream> #include <string> #include <stdio.h> # include <cola> # include <pila> # include <mapa> # include <set> #include <string.h> #include <vector> #include <stdlib.h> using namespace std; typedef largo largo ll; #define int ll #define Mod 1000000007 gcd #define (m, n) __gcd (m, n) rep #define (i, j, n) for (int i = j; i <= n; i ++) #define rojo (i, n, j) for (int i = n; i> = j; i--) #define ME (x, y) memset (x, y, sizeof (x)) int lcm (int a, int b) {return a * b / gcd (a, b);} // ll quickpow (ll a, ll b) {ll ans = 1, mientras que (b) {if (b & 1) ans = ans * a mod%; b >> = 1, a = a * a mod%;} return ans;} // ans int euler1 (int x) {int = x; for (int i = 2; i * i <= x; i ++) si (x% i == 0) {Respuesta-= ans / i, mientras que (x % i == 0) x / = i;} if (x> 1) Respuesta-= American National Standard / x; ans de retorno;} // int const N = 1E7 + 9; int VIS [n], el primer [n], phi [N]; int euler2 (int n) {ME (vis, true); int len = 1; rep (i, 2, n) {if (vis [i] ) {prime [len ++] = i, phi [i] = i-1;} for (int j = 1; j <len && prime [j] * i <= n; j ++) {vis [i * prime [j]] = 0; si (% prime i [j] == 0) {phi [i * prime [j]] = phi [i] * prime [j]; break;} else {phi [i * prime [j]] = phi [i] * phi [prime [j]];}}} len retorno} #define INF 0x3f3f3f3f acos #define PI (-1) par pii #define <int, int> #define fi primera #define SE segundo #define LSON l, mediados, raíz << 1 #define rson mitad + 1, R, raíz << 1 | 1 #define pb push_back #define mp make_pair #define todos (v) v.begin (), V.END () tamaño #define (v) (int) (v.size ()) #define cin (x) scanf ( "% LLD", y x); int const N = 1E7 + 9; const int maxN = 2e2 + 9; const doble esp = 1e-6; Duplicar mi [maxN] [maxN]; dis dobles [maxN]; int vis [maxN], n, m, cnt; Pii un [maxN]; void Dijia (int r) { rep (i, 1, n) { dis [c] = y [R] [c]; } forma [R] = 1; rep (i, 1, n-1) { pos int; doble mi = INF; rep (j, 1, n) { if (! vis [j] && mi> dis [j]) { pos = j; mi = dis [j]; } } para [pos] = 1; rep (j, 1, n) { dobles x = max (dis [pos], ma [pos] [j]); if (! vis [j] && x <dis [j]) { decir [j] = x; } } } } init void () { de llenado (ma [0], ma [0] + maxN * maxN, INF); ME (ver, 0); } anulará solve () { en eso(); int Bx, By, ex, ey; scanf ( "% LLD% LLD% LLD% LLD", y bx, y por, y ex, y ey); a [1] = BX .NET, y [1] = .es por, y [n] = ex .NET, y [n] = ey .es. rep (i, 2, n-1) { usted y, v; scanf ( "% LLD% LLD", & a [i] .fi, & a [i] .es); } rep (i, 1, n) { rep (j, 1, i-1) { en [i] [j] = en [j] [i] = min (en [i] [j], sqrt ((a [i] .NET - un [j] .NET) * (a [i]. fi - un [j] .NET) + (a [i] .es - y [j] .es) * (a [i] .es - y [j] .es))); } } Dijia (1); tribunal << "Escenario" << ++ cnt << endl; printf ( "rana Distancia =% .3f \ n \ n", dis [n]); } firmado principal () { // int t; // cin >> t; // while (t--) mientras que (~ scanf ( "% LLD", y n) && n) resolver(); }