목차

누텔라 트리 (Easy)

ps
링크acmicpc.net/…
출처BOJ
문제 번호23040
문제명누텔라 트리 (Easy)
레벨골드 3
분류

Disjoint Set

시간복잡도O(n*α(n))
인풋사이즈n<=100,000
사용한 언어Python
제출기록40788KB / 312ms
최고기록312ms
해결날짜2021/10/18

풀이

코드

"""Solution code for "BOJ 23040. 누텔라 트리 (Easy)".

- Problem link: https://www.acmicpc.net/problem/23040
- Solution link: http://www.teferi.net/ps/problems/boj/23040

Tags: [DisjointSet]
"""

import sys
from teflib import disjointset


def main():
    N = int(sys.stdin.readline())
    edges = [sys.stdin.readline() for _ in range(N - 1)]
    color = sys.stdin.readline()

    dsu = disjointset.DisjointSet(N)
    red_groups = []
    for edge in edges:
        u, v = [int(x) for x in edge.split()]
        if color[u - 1] == color[v - 1] == 'R':
            dsu.union(u - 1, v - 1)
        elif color[u - 1] == 'R':
            red_groups.append(u - 1)
        elif color[v - 1] == 'R':
            red_groups.append(v - 1)

    print(sum(dsu.size(x) for x in red_groups))


if __name__ == '__main__':
    main()