summaryrefslogtreecommitdiff
path: root/graph/scc.cpp
diff options
context:
space:
mode:
authorGloria Mundi <gloria@gloria-mundi.eu>2024-06-05 19:06:13 +0200
committerGloria Mundi <gloria@gloria-mundi.eu>2024-06-05 19:06:13 +0200
commitde5584da1968cb83dca379ce6480ec7b2ab57732 (patch)
tree2e0f1320480147c87bfa2a7b32978ee401fd258f /graph/scc.cpp
parent2ff696b7a72f484f435ffc37dcacedb6fa434b3b (diff)
parent4680159f439b3b9651321e2dc9083a51fe6ce954 (diff)
merge mzuenni changes
Diffstat (limited to 'graph/scc.cpp')
-rw-r--r--graph/scc.cpp15
1 files changed, 6 insertions, 9 deletions
diff --git a/graph/scc.cpp b/graph/scc.cpp
index 5aa7cf2..ac9a40b 100644
--- a/graph/scc.cpp
+++ b/graph/scc.cpp
@@ -1,5 +1,5 @@
vector<vector<int>> adj, sccs;
-int counter, sccCounter;
+int counter;
vector<bool> inStack;
vector<int> low, idx, s; //idx enthält Index der SCC pro Knoten.
@@ -14,14 +14,11 @@ void visit(int v) {
if (old == low[v]) {
sccs.push_back({});
- int u;
- do {
+ for (int u = -1; u != v;) {
u = s.back(); s.pop_back(); inStack[u] = false;
- idx[u] = sccCounter;
- sccs[sccCounter].push_back(u);
- } while (u != v);
- sccCounter++;
-}}
+ idx[u] = sz(sccs) - 1;
+ sccs.back().push_back(u);
+}}}
void scc() {
inStack.assign(sz(adj), false);
@@ -29,7 +26,7 @@ void scc() {
idx.assign(sz(adj), -1);
sccs.clear();
- counter = sccCounter = 0;
+ counter = 0;
for (int i = 0; i < sz(adj); i++) {
if (low[i] < 0) visit(i);
}}