Skip to content

Commit f0d14b6

Browse files
committed
make function
1 parent 9fb0981 commit f0d14b6

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

library/graphs/uncommon/functional_graph_processor.hpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,25 @@
1111
//! t[v].childs = forest of reversed edges not in cycles
1212
//! @time O(n)
1313
//! @space O(n)
14-
struct func_graph {
15-
vector<pii> root_of;
16-
vector<vi> cycle, childs;
17-
func_graph(const vi& a): root_of(sz(a)), childs(sz(a)) {
18-
vi vis(sz(a));
19-
rep(i, 0, sz(a)) if (!vis[i]) {
20-
int u = i;
21-
for (; !vis[u]; u = a[u]) vis[u] = 1;
22-
if (vis[u] == 1)
23-
for (cycle.emplace_back(); vis[u] == 1; u = a[u]) {
24-
root_of[u] = {sz(cycle) - 1, sz(cycle.back())};
25-
cycle.back().push_back(u);
26-
vis[u] = 2;
27-
}
28-
for (int v = i; vis[v] == 1; v = a[v]) {
29-
root_of[v] = root_of[u];
30-
childs[a[v]].push_back(v);
31-
vis[v] = 2;
14+
auto func_graph(const vi& a) {
15+
int n = sz(a);
16+
vector<pii> root_of(n);
17+
vector<vi> cycle, childs(n);
18+
vi vis(n);
19+
rep(i, 0, n) if (!vis[i]) {
20+
int u = i;
21+
for (; !vis[u]; u = a[u]) vis[u] = 1;
22+
if (vis[u] == 1)
23+
for (cycle.emplace_back(); vis[u] == 1; u = a[u]) {
24+
root_of[u] = {sz(cycle) - 1, sz(cycle.back())};
25+
cycle.back().push_back(u);
26+
vis[u] = 2;
3227
}
28+
for (int v = i; vis[v] == 1; v = a[v]) {
29+
root_of[v] = root_of[u];
30+
childs[a[v]].push_back(v);
31+
vis[v] = 2;
3332
}
3433
}
35-
};
34+
return tuple{root_of, cycle, childs};
35+
}

0 commit comments

Comments
 (0)