29. Number of Operations to Make Network Connected
Previous28. Find the City With the Smallest Number of Neighbors at a Threshold DistanceNext30. Open the Lock
Last updated
Last updated
Input: n = 4, connections = [[0,1],[0,2],[1,2]]
Output: 1
Explanation: Remove cable between computer 1 and 2 and place between computers 1 and 3.Input: n = 6, connections = [[0,1],[0,2],[0,3],[1,2],[1,3]]
Output: 2Input: n = 6, connections = [[0,1],[0,2],[0,3],[1,2]]
Output: -1
Explanation: There are not enough cables.Input: n = 5, connections = [[0,1],[0,2],[3,4],[2,3]]
Output: 0class Solution
{
public:
void dfs(int node, vector<int> v[], vector<bool> &vs)
{
if (vs[node])
{
return;
}
vs[node] = 1;
for (int i = 0; i < v[node].size(); i++)
{
if (!vs[v[node][i]])
{
dfs(v[node][i], v, vs);
}
}
return;
}
int makeConnected(int n, vector<vector<int>> &connections)
{
int numEdges = connections.size();
if(numEdges<n-1){
return -1;
}
vector<int> v[n];
vector<bool> vs(n, 0);
for (int i = 0; i < connections.size(); i++)
{
int a = connections[i][0];
int b = connections[i][1];
v[a].push_back(b);
v[b].push_back(a);
}
int count = 0;
for (int i = 0; i < n; i++)
{
if (!vs[i])
{
dfs(i, v, vs);
count++;
}
}
return count - 1;
}
};class Solution
{
public:
int find(vector<int> &v, int node)
{
if (v[node] == -1)
{
return node;
}
v[node] = find(v, v[node]);
return v[node];
}
void uni(vector<int> &v, vector<int> &rank, int parA, int parB)
{
if (parA != parB)
{
if (rank[parA] > rank[parB])
{
v[parB] = parA;
}
else if (rank[parB] > rank[parA])
{
v[parA] = parB;
}
else
{
v[parA] = parB;
rank[parB]++;
}
}
return;
}
int makeConnected(int n, vector<vector<int>> &connections)
{
int numEdges = connections.size();
vector<int> v(n, -1);
vector<int> rank(n, 0);
if (numEdges < n - 1)
{
return -1;
}
for (int i = 0; i < connections.size(); i++)
{
int a = connections[i][0];
int b = connections[i][1];
int parA = find(v, a);
int parB = find(v, b);
if (parA != parB)
{
uni(v, rank, parA, parB);
}
}
int count = 0;
for (int i = 0; i < n; i++)
{
if (v[i] == -1)
{
count++;
}
}
return count - 1;
}
};