[docs]17@classmethod18defbuild(19cls,20n:int,21typ:RandomTreeType=RandomTreeType.random,22seed:Optional[int]=None,23)->list[tuple[int,int]]:24"""ランダムな木を生成し、辺を返します。25 :math:`O(n \\log{n})` です。2627 Args:28 n (int): 頂点の数です。29 typ (RandomTreeType, optional): 木の形です。 Defaults to RandomTreeType.random。30 seed (Optional[int], optional): seed値です。 Defaults to None。3132 Returns:33 list[tuple[int, int]]: 辺のリストです。辺のインデックスは 0-indexed です。34 """35cls.rand=random.Random(seed)36edges=None37iftyp==RandomTreeType.random:38edges=cls._build_random(n)39eliftyp==RandomTreeType.path:40edges=cls._build_path(n)41eliftyp==RandomTreeType.star:42edges=cls._build_star(n)43assert(44edgesisnotNone45),f"{cls.__class__.__name__}.build({typ}), typ is not defined."46cls.rand.shuffle(edges)47returnedges