Título:
En este problema, un árbol se refiere a un gráfico conectado y acíclico no dirigido.
Ingrese un gráfico que consta de un árbol con N nodos (los valores de los nodos no se repiten 1, 2,…, N) y un borde adicional. Los dos vértices del borde adicional están contenidos entre 1 y N. Este borde adicional no pertenece a un borde existente en el árbol.
El gráfico resultante es una matriz bidimensional de aristas. Los elementos de cada borde son un par de [u, v], que satisfacen u <v, que representan los bordes del gráfico no dirigido que conecta los vértices u y v.
Devuelve un borde que se puede eliminar para que el gráfico resultante sea un árbol con N nodos. Si hay varias respuestas, se devuelve el último borde de la matriz bidimensional. El lado de la respuesta [u, v] debe satisfacer el mismo formato u <v.
Ejemplo 1:
Entrada: [[1,2], [1,3], [2,3]]
Salida: [2,3]
Explicación: El gráfico no dirigido dado es:
1
/
2-3
Ejemplo 2:
Entrada: [ [1,2], [2,3], [3,4], [1,4], [1,5]]
Resultado: [1,4]
Explicación: El gráfico no dirigido dado es:
5 -1-2
| |
4-3
código: (y verifique el conjunto)
class Solution {
public:
int Find(vector<int>& parent, int index) {
if (parent[index] != index) {
parent[index] = Find(parent, parent[index]);
}
return parent[index];
}
void Union(vector<int>& parent, int index1, int index2) {
parent[Find(parent, index1)] = Find(parent, index2);
}
vector<int> findRedundantConnection(vector<vector<int>>& edges) {
int nodesCount = edges.size();
vector<int> parent(nodesCount + 1);
for (int i = 1; i <= nodesCount; ++i) {
parent[i] = i;
}
for (auto& edge: edges) {
int node1 = edge[0], node2 = edge[1];
if (Find(parent, node1) != Find(parent, node2)) {
Union(parent, node1, node2);
} else {
return edge;
}
}
return vector<int>{
};
}
};