๐ ๋ฌธ์
์ง๋ฏผ์ด๋ ํํฐ์ ๊ฐ์ ์ด์ผ๊ธฐ ํ๋ ๊ฒ์ ์ข์ํ๋ค. ํํฐ์ ๊ฐ ๋๋ง๋ค, ์ง๋ฏผ์ด๋ ์ง๋ฏผ์ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ด์ผ๊ธฐ๋ฅผ ํ๋ค. ์ง๋ฏผ์ด๋ ๊ทธ ์ด์ผ๊ธฐ๋ฅผ ๋งํ ๋, ์๋ ๊ทธ๋๋ก ์ง์ค๋ก ๋งํ๊ฑฐ๋ ์์ฒญ๋๊ฒ ๊ณผ์ฅํด์ ๋งํ๋ค. ๋น์ฐํ ๊ณผ์ฅํด์ ์ด์ผ๊ธฐํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ฌ๋ฏธ์๊ธฐ ๋๋ฌธ์, ๋๋๋ก์ด๋ฉด ๊ณผ์ฅํด์ ์ด์ผ๊ธฐํ๋ ค๊ณ ํ๋ค. ํ์ง๋ง, ์ง๋ฏผ์ด๋ ๊ฑฐ์ง๋ง์์ด๋ก ์๋ ค์ง๊ธฐ๋ ์ซ์ดํ๋ค. ๋ฌธ์ ๋ ๋ช๋ช ์ฌ๋๋ค์ ๊ทธ ์ด์ผ๊ธฐ์ ์ง์ค์ ์๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ์ฌ๋๋ค์ด ํํฐ์ ์์ ๋๋, ์ง๋ฏผ์ด๋ ์ง์ค์ ์ด์ผ๊ธฐํ ์ ๋ฐ์ ์๋ค. ๋น์ฐํ, ์ด๋ค ์ฌ๋์ด ์ด๋ค ํํฐ์์๋ ์ง์ค์ ๋ฃ๊ณ , ๋๋ค๋ฅธ ํํฐ์์๋ ๊ณผ์ฅ๋ ์ด์ผ๊ธฐ๋ฅผ ๋ค์์ ๋๋ ์ง๋ฏผ์ด๋ ๊ฑฐ์ง๋ง์์ด๋ก ์๋ ค์ง๊ฒ ๋๋ค. ์ง๋ฏผ์ด๋ ์ด๋ฐ ์ผ์ ๋ชจ๋ ํผํด์ผ ํ๋ค.
์ฌ๋์ ์ N์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ผ๊ธฐ์ ์ง์ค์ ์๋ ์ฌ๋์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํํฐ์ ์ค๋ ์ฌ๋๋ค์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ง๋ฏผ์ด๋ ๋ชจ๋ ํํฐ์ ์ฐธ๊ฐํด์ผ ํ๋ค. ์ด๋, ์ง๋ฏผ์ด๊ฐ ๊ฑฐ์ง๋ง์์ด๋ก ์๋ ค์ง์ง ์์ผ๋ฉด์, ๊ณผ์ฅ๋ ์ด์ผ๊ธฐ๋ฅผ ํ ์ ์๋ ํํฐ ๊ฐ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๋์ ์ N๊ณผ ํํฐ์ ์ M์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์๋ ์ด์ผ๊ธฐ์ ์ง์ค์ ์๋ ์ฌ๋์ ์์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ง์ค์ ์๋ ์ฌ๋์ ์๊ฐ ๋จผ์ ์ฃผ์ด์ง๊ณ ๊ทธ ๊ฐ์๋งํผ ์ฌ๋๋ค์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ฌ๋๋ค์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ ์๋ก ์ฃผ์ด์ง๋ค.
์ ์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ๊ฐ ํํฐ๋ง๋ค ์ค๋ ์ฌ๋์ ์์ ๋ฒํธ๊ฐ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฃผ์ด์ง๋ค.
N, M์ 50 ์ดํ์ ์์ฐ์์ด๊ณ , ์ง์ค์ ์๋ ์ฌ๋์ ์๋ 0 ์ด์ 50 ์ดํ์ ์ ์, ๊ฐ ํํฐ๋ง๋ค ์ค๋ ์ฌ๋์ ์๋ 1 ์ด์ 50 ์ดํ์ ์ ์์ด๋ค.
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฌธ์ ์ ์ ๋ต์ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํ์ด
๋ฌธ์ ๋ฅผ ๊ฐ๋จํ๊ฒ ํด์ํด๋ณด์๋ฉด ์ง์ค์ ์๊ณ ์๋ ์ฌ๋๊ณผ ๊ฐ์ด ํํฐ๋ฅผ ํ๋ ์ธ์๊น์ง ์ ๋ถ ๊ณ ๋ คํ์ฌ ์ง์ค์ ์๊ณ ์๋ ์ฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค์ ๊ฐ๊ฐ์ ํํฐ์ ํด๋น ์ฌ๋์ด ํฌํจ๋์ด ์๋์ง ์ฒดํฌํ์ฌ ์๋ ํํฐ์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
์ฒ์์ ์ง์ค์ ์๊ณ ์๋ ์ฌ๋๊ณผ ์ด ์ฌ๋๋ค๊ณผ ๊ฐ์ด ํํฐ์ ์ฐธ๊ฐํ์ฌ ์ง์ค์ ์๊ฒ๋๋ ์ฌ๋์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ BFS ๋ฅผ ์ฌ์ฉํ์๊ณ , ์์ํ ์ค๋ณต์ฒ๋ฆฌ ๊ฐ์ ๊ฒฝ์ฐ์๋ set๊ณผ list ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ์๋ค.
๐ป ์ฝ๋
import sys
from collections import deque
input=sys.stdin.readline
# ์
๋ ฅ ํํธ
n,m=map(int,input().rstrip().split())
peo=list(map(int,input().rstrip().split()))
party=[list(map(int,input().rstrip().split())) for _ in range(m)]
# ์ง์ค์ ์๊ณ ์๋ ์ฌ๋๋ค ๋ง๋ค์ด์ค ํํธ
graph=[[] for _ in range(n+1)] # ์ด์ํ์ง ์ฒดํฌํด์ค ๋ฐฐ์ด
visited=[False for _ in range(n+1)] # ์ง์ค์ ์๊ณ ์๋ ์ฌ๋ ๋ํ๋ผ ๋ฐฐ์ด
queue=deque()
# ๊ทธ๋ํ ๊ทธ๋ ค์ค
for i in party:
per=i[1:]
for j in per:
# ์ด์ํ ๊ฒ ํ์
graph[j].extend(per) # ์ต์คํ
๋ ํ๊ฑฐ ์
์ผ๋ก ์์ ์ค ๊ฑฐ์
for k in range(n+1):
graph[k] = list(set(graph[k])-{k}) # ์๊ธฐ ์์ ์ ์ธํด์ค(์ฐจ์งํฉ)
# ์ฒ์๋ถํฐ ์ง์ค์ ์๊ณ ์๋ ์ฌ๋ ์ฒดํฌ
for v in peo[1:]:
visited[v] = True
queue.append(v)
# bfs ์ ์
def bfs():
while queue:
q=queue.popleft()
for v in graph[q]:
if not visited[v]:
visited[v]=True
queue.append(v)
# bfs ํธ์ถ
bfs()
# ์ง์ค์ ์๊ณ ์๋ ์ฌ๋
res=set()
ans=0
# ๋ถ๋ฆฌ์์ผ๋ก ๋์ด์๋ ๋ฐฐ์ด ๋ณํ
for q in range(n+1):
if visited[q]:
res.add(q)
# ๊ฐ ํํฐ์ ์ง์ค์ ์๊ณ ์๋ ์ฌ๋์ด ์๋์ง ํ์ธ
# ์ด๋ป๊ฒ?? ์ฐจ์งํฉ์ผ๋ก
for c in party:
if set(c[1:])==set(c[1:])-res:
ans+=1
print(ans)
๐ ๋ฌธ์ ๋งํฌ ๊ฑฐ์ง๋ง
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1753๋ฒ: ์ต๋จ๊ฒฝ๋ก - ํ์ด์ฌ (0) | 2022.07.30 |
---|---|
[๋ฐฑ์ค] 2470๋ฒ: ๋ ์ฉ์ก (0) | 2022.07.28 |
[๋ฐฑ์ค] 10026๋ฒ: ์ ๋ก์์ฝ - ํ์ด์ฌ (0) | 2022.07.14 |
[๋ฐฑ์ค] 11688๋ฒ: ์ต์๊ณต๋ฐฐ์ ์ฐพ๊ธฐ - ํ์ด์ฌ (0) | 2022.07.11 |
[๋ฐฑ์ค] 25432๋ฒ: ์ต๋ ์ต์๊ณต๋ฐฐ์ - ํ์ด์ฌ (0) | 2022.07.09 |