Número de operaciones conectadas a la red java

Utilice cables Ethernet para conectar n computadoras a una red, y los números de las computadoras van del 0 al n-1. Los cables están representados por conexiones, donde las conexiones [i] = [a, b] conectan las computadoras ay b.

Cualquier computadora en la red puede acceder directa o indirectamente a cualquier otra computadora en la misma red a través de la red.

Para darle las conexiones de cableado iniciales de esta red de computadoras, puede desconectar el cable entre dos computadoras conectadas directamente y usarlo para conectar un par de computadoras que no están conectadas directamente. Calcule y devuelva el número mínimo de operaciones necesarias para conectar todas las computadoras. Si no es posible, se devuelve -1.

Ejemplo 1:

Entrada: n = 4, conexiones = [[0,1], [0,2], [1,2]]
Salida: 1
Explicación: Desenchufe el cable entre las computadoras 1 y 2, y conéctelo a las computadoras 1 y 3 en.
Ejemplo 2:

Entrada: n = 6, conexiones = [[0,1], [0,2], [0,3], [1,2], [1,3]]
Salida: 2
Ejemplo 3:

Entrada: n = 6, conexiones = [[0,1], [0,2], [0,3], [1,2]]
Salida: -1
Explicación: El número de cables es insuficiente.
Ejemplo 4:

Entrada: n = 5, conexiones = [[0,1], [0,2], [3,4], [2,3]]
Salida: 0

rápido:

1 <= n <= 10 ^ 5
1 <= connections.length <= min (n * (n-1) / 2, 10 ^ 5)
conexiones [i] .length == 2
0 <= conexiones [i] [ 0], conexiones [i] [1] <n
conexiones [i] [0]! = Conexiones [i] [1]
No hay conexiones duplicadas.
Dos computadoras no estarán conectadas por varios cables.

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/number-of-operations-to-make-network-connected Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Idea: Esta plantilla de conjunto de preguntas es suficiente. Lo escribí yo mismo, pero realmente no entendí la solución. Siento que su matriz de tamaño no está disponible.

class Solution {
    
    
    public int makeConnected(int n, int[][] connections) {
    
    
        if (connections.length < n - 1) {
    
    
            return -1;
        }
        UnionFind uf = new UnionFind(n);
        for (int[] conn : connections) {
    
    
            uf.union(conn[0], conn[1]);
        }

        return uf.Count - 1;
    }
}

// 并查集模板
class UnionFind {
    
    
    int[] parent;
    //int[] size;
    int n;
    // 当前连通分量数目
    int Count;

    public UnionFind(int n) {
    
    
        this.n = n;
        this.Count = n;
        this.parent = new int[n];
        //this.size = new int[n];
        //Arrays.fill(size, 1);
        for (int i = 0; i < n; ++i) {
    
    
            parent[i] = i;
        }
    }
    
    public int find(int x) {
    
    
        if(parent[x]!=x)
        {
    
    
            parent[x] = find(parent[x]);
        }
        return parent[x];
    }
    
    public boolean union(int x, int y) {
    
    
        x = find(x);
        y = find(y);
        if (x == y) {
    
    
            return false;
        }
        //if (size[x] < size[y]) {
    
    
        //    int temp = x;
        //    x = y;
        //    y = temp;
        //}
        parent[x] = y;
        //size[x] += size[y];
        --Count;
        return true;
    }
    
    public boolean connected(int x, int y) {
    
    
        x = find(x);
        y = find(y);
        return x == y;
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43824233/article/details/113050649
Recomendado
Clasificación