La deformación camino más corto (valor mínimo hasta el máximo valor)

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();
}

 

Supongo que te gusta

Origin www.cnblogs.com/nonames/p/12543858.html
Recomendado
Clasificación