Advertisement
Guest User

Untitled

a guest
Jul 15th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. class Solution {
  2. void dfs(vector<vector<int>>& edges, vector<bool>& visited, int root, int parent, vector<int>& parents, int& cyclo) {
  3. visited[root] = true;
  4. for(int vertex : edges[root]) {
  5. if (vertex != parent) {
  6. parents[vertex] = root;
  7. if (visited[vertex]) {
  8. cyclo = vertex;
  9. }
  10. else {
  11. dfs(edges, visited, vertex, root, parents, cyclo);
  12. }
  13. }
  14. }
  15. }
  16.  
  17. public:
  18. vector<int> findRedundantConnection(vector<vector<int>>& edges) {
  19. vector<bool> visited(edges.size() + 1, false);
  20. vector<int> parents(edges.size() + 1, 0);
  21. vector<vector<int>> good_edges(edges.size() + 1, vector<int>());
  22. for (int i = 0; i < edges.size(); i++) {
  23. good_edges[edges[i][0]].push_back(edges[i][1]);
  24. good_edges[edges[i][1]].push_back(edges[i][0]);
  25. }
  26. int cyclo = 0;
  27. dfs(good_edges, visited, 1, 0, parents, cyclo);
  28. for (int i : parents) {
  29. cout << i << ' ';
  30. }
  31. set<vector<int>> ribs;
  32. int curr = cyclo;
  33. int next = 0;
  34. while (next != cyclo) {
  35. next = parents[curr];
  36. int f = curr;
  37. int s = next;
  38. ribs.insert({min(f, s), max(f, s)});
  39. curr = next;
  40. }
  41. for (int i = edges.size() - 1; i >= 0; i--) {
  42. if (ribs.count(edges[i]) > 0) {
  43. return edges[i];
  44. }
  45. }
  46. return {};
  47. }
  48. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement