Advertisement
limimage

bridges

Mar 24th, 2020
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.63 KB | None | 0 0
  1. // tin - время входа, tup[u] = минимальная по всем вершинам поддерева величина tin[p], где p = второй конец ребра для вершины
  2.  
  3. // если tup[u] == tin[u] < = > ребро в предка u - мост
  4.  
  5. void dfs(int i, int p = -1)
  6. {
  7. used[i] = true;
  8. tin[i] = t++;
  9. tup[i] = tin[i];
  10. for (int j: gr[i])
  11. {
  12. if (j == p)
  13. continue;
  14. if (used[j])
  15. tup[i] = min(tup[i], tin[j]);
  16. else
  17. {
  18. dfs(j, i);
  19. tup[i] = min(tup[j], tup[i]);
  20. }
  21. }
  22. if (p != -1 && tup[i] == tin[i])
  23. bridges.emplace_back(i, p);
  24. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement