Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // tin - время входа, tup[u] = минимальная по всем вершинам поддерева величина tin[p], где p = второй конец ребра для вершины
- // если tup[u] == tin[u] < = > ребро в предка u - мост
- void dfs(int i, int p = -1)
- {
- used[i] = true;
- tin[i] = t++;
- tup[i] = tin[i];
- for (int j: gr[i])
- {
- if (j == p)
- continue;
- if (used[j])
- tup[i] = min(tup[i], tin[j]);
- else
- {
- dfs(j, i);
- tup[i] = min(tup[j], tup[i]);
- }
- }
- if (p != -1 && tup[i] == tin[i])
- bridges.emplace_back(i, p);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement