|
| 1 | +/* |
| 2 | +ProblemLink : https://leetcode.com/problems/redundant-connection/ |
| 3 | + |
| 4 | +In this problem, a tree is an undirected graph that is connected and has no cycles. |
| 5 | + |
| 6 | +You are given a graph that started as a tree with n nodes labeled from 1 to n, with one additional edge added. |
| 7 | +The added edge has two different vertices chosen from 1 to n, and was not an edge that already existed. |
| 8 | +The graph is represented as an array edges of length n where edges[i] = [ai, bi] indicates that there is an edge between nodes ai and bi in the graph. |
| 9 | + |
| 10 | +Return an edge that can be removed so that the resulting graph is a tree of n nodes. |
| 11 | +If there are multiple answers, return the answer that occurs last in the input. |
| 12 | +*/ |
| 13 | + |
| 14 | +class Solution { |
| 15 | +public: |
| 16 | + int find(int v,vector<int>& parent){ |
| 17 | + if(parent[v]==-1){ |
| 18 | + return v; |
| 19 | + } |
| 20 | + return find(parent[v],parent); |
| 21 | + } |
| 22 | + void Union(int x,int y,vector<int>& parent){ |
| 23 | + parent[x]=y; |
| 24 | + } |
| 25 | + |
| 26 | + vector<int> findRedundantConnection(vector<vector<int>>& edges) { |
| 27 | + int V = edges.size(); |
| 28 | + vector<int> parent(V+1,-1); |
| 29 | + int v1,v2; |
| 30 | + for(auto x:edges){ |
| 31 | + int fromP = find(x[0],parent); |
| 32 | + int toP = find(x[1],parent); |
| 33 | + if(fromP==toP){ |
| 34 | + v1=x[0]; |
| 35 | + v2=x[1]; |
| 36 | + } |
| 37 | + else{ |
| 38 | + Union(fromP,toP,parent); |
| 39 | + } |
| 40 | + } |
| 41 | + vector<int> ans; |
| 42 | + ans.push_back(v1); |
| 43 | + ans.push_back(v2); |
| 44 | + return ans; |
| 45 | + } |
| 46 | +}; |
0 commit comments