P1396 Rescue + Spanning Tree

Algoritmo

Árbol de expansión mínimo

Ideas

De hecho, es una cuestión de plantilla del árbol de expansión mínima. Utilizo el algoritmo kruskal aquí. Lo único a tener en cuenta es que cada vez que se agrega un borde, es necesario determinar si syt están en un conjunto, para que AC pueda ser suave. (Ordenado)

Código

#include <cstdio> 
#include <cstring> 
#include <iostream> 
#include <algorithm> 
mediante el espacio de nombres std; 
int fa [10005]; 
struct node { 
    int x, y, z; 
}; 
node way [20010]; 
int n , m, s, t, tot = 0; 
int com (const node & c, const node & d) 
{ 
    return cz <dz; 
} 
int find (int g) // encuentra el elemento representativo del conjunto donde se encuentra el elemento 
{ 
    if (fa [ g]! = g) 
       fa [g] = find (fa [g]); 
    return fa [g]; 
} 
int unionn (int s1, int s2) // El proceso de fusión de conjuntos 
{ 
    int r1 = find (s1); 
    int r2 = find (s2); 
    if (r1! = r2) 
       fa [r1] = r2; 
} 
int js () 
{
    int i, j, k; 
    k = 1; 
    i = 1; 
    while (k <n) 
    { 
        while (find (way [i] .x) == find (way [i] .y)) 
            i ++; 
        tot = max (way [i] .z, tot); // Debido a que se usa el valor máximo, se usa un máximo. De hecho, no hay necesidad de ser tan problemático, porque el borde debe ser de mayor a menor, y el borde agregado más tarde debe ser mayor, Puede escribir directamente tot = way [i] .z; 
        unionn (way [i] .x, way [i] .y); // aquí hay un proceso de verificación de unión 
        k ++; 
        if (find (s) == find ( t)) // Juicio, creo que es el detalle más importante de este corte de pregunta 
           ; 
    } 
} 
int main () 
{ 
    scanf ("% d% d% d% d", & n, & m, & s, & t); 
    int i ; 
    for (i = 1; i <= m; i ++) 
    { 
       scanf ("% d% d% d", & way [i] .x, & way [i] .y, & way [i] .z); 
    } 
    para (i = 1; i <= n; i ++)
      fa [i] = i;
    sort (way + 1, way + 1 + m, com); // ordena los bordes de pequeño a grande 
    js (); 
    printf ("% d", tot); 
    return 0; 
}

  

 

Supongo que te gusta

Origin www.cnblogs.com/ruanmowen/p/12727698.html
Recomendado
Clasificación