-
[๋ฐฑ์ค] 9372 ์๊ทผ์ด์ ์ฌํ with PythonPS 2022. 2. 22. 20:17728x90๋ฐ์ํ
๐ BOJ 9372 ์๊ทผ์ด์ ์ฌํ
๐ก ์กฐ๊ฑด
N๊ฐ๊ตญ์ ์ฌํํ ์๊ทผ์ด์๊ฒ ๊ฐ์ฅ ์ ์ ๋นํ๊ธฐ๋ฅผ ํ๊ณ ์ฌํํ ์ ์๊ฒ ๋์์ฃผ์.
ํ ์คํธ ์ผ์ด์ค์ ์ T(T โค 100)
์ฒซ ๋ฒ์งธ ์ค์๋ ๊ตญ๊ฐ์ ์ N(2 โค N โค 1 000)๊ณผ ๋นํ๊ธฐ์ ์ข ๋ฅ M(1 โค M โค 10 000) ๊ฐ ์ฃผ์ด์ง๋ค.
์ดํ M๊ฐ์ ์ค์ a์ b ์๋ค์ด ์ ๋ ฅ๋๋ค. a์ b๋ฅผ ์๋ณตํ๋ ๋นํ๊ธฐ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. (1 โค a, b โค n; a โ b)
์ฃผ์ด์ง๋ ๋นํ ์ค์ผ์ค์ ํญ์ ์ฐ๊ฒฐ ๊ทธ๋ํ๋ฅผ ์ด๋ฃฌ๋ค.๊ทธ๋ํ์ด๋ก , ์ ๋์จ-ํ์ธ๋ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin def find_parent(parent, x): if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union_parent(a, b, parent): a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[a] = b else: parent[b] = a for test_case in range(int(stdin.readline())): n, m = map(int, stdin.readline().split()) nations = [x for x in range(n + 1)] res = 0 for _ in range(m): a, b = map(int, stdin.readline().split()) if find_parent(nations, a) != find_parent(nations, b): union_parent(a, b, nations) res += 1 print(res)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
2 3 3 1 2 2 3 1 3 5 4 2 1 2 3 4 3 4 5
์คํ๊ฒฐ๊ณผ
2 4
โจ๏ธ ๋ฌธ์ ํ์ด
Union-Find ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
parent ๋ฆฌ์คํธ์์ ๊ฐ ๊ตญ์ ๋ณธ์ธ์ ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋ง์ฝ ์๊ทผ์ด๊ฐ a๊ตญ๊ฐ์์ b ๊ตญ๊ฐ๋ฅผ ๊ฐ๋ค๊ณ ์ ๋ ฅ์ ๋ฐ์์ผ๋ฉด, a์ b ๊ตญ๊ฐ์ parent ๋ฅผ ์ฐพ๊ณ , ๋ง์ฝ ์๋ก ๊ฐ์ง ์๋ค๋ฉด ๊ฐ์ ๋ถ๋ชจ์ ์ํ๋๋ก ๋ณ๊ฒฝํ๋ค.(2)๋ฒ ์์ ์ ๋ง์น ๋ค, res + 1
res ๋ฅผ ์ถ๋ ฅํ๋ค.
๐พ ๋๋์
- ๊ณตํญ์ด๋ผ๋ ๋ฌธ์ ๋ฅผ ํ์๋ ๊ธฐ์ต์ด ์๊ณ , ์ ๋์จ-ํ์ธ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ์๋ํด ๋ดค์๋ ๊ธฐ์ต์ด ์์ต๋๋ค.
- ์ ํ๋ก ํ๋ฒ์ ํ์๋ ๋ฌธ์ ์ ๋๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11501 ์ฃผ์ with Python (0) 2022.02.24 [๋ฐฑ์ค] 10546 ๋ฐฐ๋ถ๋ฅธ ๋ง๋ผํ ๋ with Python (0) 2022.02.24 [๋ฐฑ์ค] 2628 ์ข ์ด ์๋ฅด๊ธฐ with Python (0) 2022.02.22 [๋ฐฑ์ค] 2168 ํฐ๋ ์์ ๋๊ฐ์ with Python (0) 2022.02.21 [๋ฐฑ์ค] 2075 N๋ฒ์งธ ํฐ ์ with Python (0) 2022.02.21