๋ฌธ์
๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง - 4195๋ฒ
ํ์ด ๊ณผ์
์น๊ตฌ ๊ด๊ณ๋ฅผ ๊ฐฑ์ ํ๋ฉด์ ์น๊ตฌ ๋คํธ์ํฌ์ ๋ช ๋ช
์ด ์๋์ง ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
์ด๋ ์ง๊ด์ ์ผ๋ก ์ ๋์จ ํ์ธ๋
์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์น๊ตฌ ๊ด๊ณ๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ๊ทธ ๋์ union
ํด์ค ๋ค ์์ฑ๋ ์งํฉ์ ํฌ๊ธฐ๋ฅผ ๋ฐํํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ด๋ ์
๋ ฅ์ผ๋ก ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ฏ๋ก ํด์ฑ
์ ํตํด ์ ๊ทผํ ์ ์๋๋ก ๋์
๋๋ฆฌ ์๋ฃํ์ ์ฌ์ฉํ ๊ฒ์ ์ ์ํฉ๋๋ค.
์ฝ๋
import sys
def union(u, v):
u, v = find(u), find(v)
if u == v:
return
if rank[u] > rank[v]:
u, v = v, u
parent[u] = v
if rank[u] == rank[v]:
rank[v] += 1
size[v] += size[u]
def find(u):
if parent[u] == u:
return u
parent[u] = find(parent[u])
return parent[u]
if __name__ == '__main__':
T = int(input())
for _ in range(T):
rank = {}
parent = {}
size = {}
F = int(input())
for _ in range(F):
targets = list(sys.stdin.readline().split())
for target in targets:
if target not in parent:
parent[target] = target
size[target] = 1
rank[target] = 1
union(targets[0], targets[1])
print(size[find(targets[0])])
๋ฐ์ํ
'๐ algorithm > boj' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 2563 - ์์ข ์ด (0) | 2021.03.18 |
---|---|
BOJ 1963 - ์์ ๊ฒฝ๋ก (0) | 2021.03.18 |
BOJ 17626 - Four Squares (0) | 2021.03.18 |
BOJ 1303 - ์ ์ - ์ ํฌ (0) | 2021.03.18 |
BOJ 1260 - DFS์ BFS (0) | 2021.03.18 |
๐ฌ ๋๊ธ