diff --git a/atcoder/dsu.hpp b/atcoder/dsu.hpp index 4bc453f..5776da6 100644 --- a/atcoder/dsu.hpp +++ b/atcoder/dsu.hpp @@ -35,8 +35,7 @@ struct dsu { int leader(int a) { assert(0 <= a && a < _n); - if (parent_or_size[a] < 0) return a; - return parent_or_size[a] = leader(parent_or_size[a]); + return _leader(a); } int size(int a) { @@ -69,6 +68,11 @@ struct dsu { // root node: -1 * component size // otherwise: parent std::vector parent_or_size; + + int _leader(int a) { + if (parent_or_size[a] < 0) return a; + return parent_or_size[a] = _leader(parent_or_size[a]); + } }; } // namespace atcoder