From ad80e6299c6028f43cde685d3fa1de76f2a04761 Mon Sep 17 00:00:00 2001 From: Kohei Morita Date: Fri, 2 May 2025 01:43:50 +0900 Subject: [PATCH] fix dsu.leader to avoid multiple assert checks --- atcoder/dsu.hpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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