Encuentre los bordes críticos y los bordes pseudocríticos en el árbol de expansión mínimo

Darte una nnGráfico conectado no dirigido ponderado con n puntos, el número de nodo es0 00 hastan - 1 n-1norte-1 , y también hay una matriz debordes de bordese d g e s, 其中bordes [i] = [fromi, toi, weighti] bordes [i] = [from_i, to_i, weight_i]e d g e s [ i ]=[ F r o myo,t Oyo,w e i g h tyo]表示 在fromi from_if r o myotoi to_it OyoHay un borde no dirigido ponderado entre los nodos. Árbol de expansión mínimo (MST) (MST)( M S T ) es un subconjunto de bordes en un gráfico dado, que conecta todos los nodos y no tiene bucles, y la suma de los pesos de estos bordes es la más pequeña.

Busque todos los bordes clave y los bordes pseudo clave del árbol de expansión mínimo en un gráfico determinado. Si se elimina un borde del gráfico, dará lugar a un aumento en el peso del árbol de expansión mínimo, entonces decimos que es un borde crítico. Los bordes pseudocríticos son bordes que pueden aparecer en algunos árboles de expansión mínima pero no en todos los árboles de expansión mínima.

Tenga en cuenta que puede devolver los subíndices de los bordes de clave y los bordes de pseudo-clave en cualquier orden, respectivamente.
Ejemplo 1:
Inserte la descripción de la imagen aquí
Entrada: n = 5, edges = [[0,1,1],[1,2,1],[2,3,2],[0,3,2],[0,4,3],[3,4,3],[1,4,6]]
Salida: [[0,1],[2,3,4,5]]
Explicación: La figura anterior describe la figura dada.
La siguiente figura muestra todos los árboles de expansión mínimos.
Inserte la descripción de la imagen aquí
Tenga en cuenta que el borde 0 y el borde 1 aparecen en todos los árboles de expansión mínimos, por lo que son los bordes clave. Usamos estos dos subíndices como la primera lista de salida.
Los bordes 2, 3, 4 y 5 son los bordes restantes de todos los MST, por lo que son bordes pseudocríticos. Los usaremos como la segunda lista de salida.
Ejemplo 2:
Inserte la descripción de la imagen aquí
Entrada: n = 4, edges = [[0,1,1],[1,2,1],[2,3,1],[0,3,1]]
Salida: [[],[0,1,2,3]]
Explicación: Se puede observar que 4 aristas tienen el mismo peso, y se pueden elegir 3 de ellas para formar un MST. Entonces, los 4 bordes son todos bordes pseudocríticos.
Consejos:
2 <= n <= 100 1 <= bordes. Longitud <= min (200, n ∗ (n - 1) 2) bordes [i]. Longitud = = 3 0 <= dei <ai <n 1 <= pesoi <= 1000 2 <= n <= 100 \\ 1 <= bordes.longitud <= min (200, \ frac {n * (n-1)} {2}) \\ bordes [i] .longitud == 3 \\ 0 <= desde_i <hasta_i <n \\ 1 <= peso_i <= 10002<=norte<=1 0 01<=e d g e s . l e n g t h<=m i n ( 2 0 0 ,2n * ( n - 1 ))e d g e s [ i ] . l e n g t h==30<=f r o myo<t Oyo<norte1<=w e i g h tyo<=1 0 0 0
所有(desdei, toi) (desde_i, hasta_i)( F r o myo,t Oyo) Los pares de números son diferentes entre sí.

Ideas

Primero necesitamos entender la definición de "borde crítico" y "borde pseudocrítico" en la descripción del título:

  • Borde crítico: si se elimina un borde del árbol de expansión mínimo, esto dará lugar a un aumento en el peso del árbol de expansión mínimo, entonces decimos que es un borde crítico. En otras palabras, si el peso del árbol de expansión mínimo de la imagen original se establece en valor \ textit {valor}valor , luego, después de eliminar este borde:

    • O el gráfico completo no está conectado y no hay un árbol de expansión mínimo;
    • O el gráfico completo está conectado y el peso del árbol de expansión mínimo correspondiente es vvv , que es estrictamente mayor quevalue \ textit {value}valor
  • Bordes pseudocríticos: bordes que pueden aparecer en algunos árboles de expansión mínima pero no en todos los árboles de expansión mínima. Es decir, podemos considerar este borde primero en el proceso de calcular el árbol de expansión mínimo, es decir, primero fusionar los dos puntos finales de este borde en el conjunto de consultas de combinación. Sea el peso final mínimo del árbol de expansión vvv , siv = valor v = \ textit {valor}v=valor , entonces este borde es un borde pseudocrítico.

Cabe señalar que los bordes de clave también satisfacen las propiedades correspondientes de los bordes de pseudo-clave. Por lo tanto, primero ejecutamos Kruskal \ texttt {Kruskal} en la imagen originalAlgoritmo de Kruskal , obtenga el valor de peso del árbol de expansión mínimo\ textit {valor}valor , luego enumeramos cada borde, primero juzgamos si es un borde crítico de acuerdo con el método anterior, si no es un borde crítico, luego juzgamos si es un borde pseudocrítico.

#include <bits/stdc++.h>

using namespace std;
const int maxn = 110;
int a[maxn][maxn];

int main() {
    
    
    int n;
    while (~scanf("%d", &n)) {
    
    
        if (!n) break;
        for (int i = 1; i <= n; i++) {
    
    
            int x = i, y = i;
            for (int j = 1; j <= n - i + 1; j++) {
    
    
                a[x][y] = j;
                x++;
            }
            x = i;
            y = i;
            for (int j = 1; j <= n - i + 1; j++) {
    
    
                a[x][y] = j;
                y++;
            }
        }
        for (int i = 1; i <= n; i++) {
    
    
            for (int j = 1; j <= n; j++) {
    
    
                printf("%d", a[i][j]);
                if (j == n) puts(""); else printf(" ");
            }
        }
        puts("");
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43601103/article/details/112919767
Recomendado
Clasificación