We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1043๋ฒˆ: ๊ฑฐ์ง“๋ง - ํŒŒ์ด์ฌ

Redddy 2022. 7. 26. 21:50

๐Ÿ”ˆ ๋ฌธ์ œ

์ง€๋ฏผ์ด๋Š” ํŒŒํ‹ฐ์— ๊ฐ€์„œ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ํŒŒํ‹ฐ์— ๊ฐˆ ๋•Œ๋งˆ๋‹ค, ์ง€๋ฏผ์ด๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ๊ทธ ์ด์•ผ๊ธฐ๋ฅผ ๋งํ•  ๋•Œ, ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ง„์‹ค๋กœ ๋งํ•˜๊ฑฐ๋‚˜ ์—„์ฒญ๋‚˜๊ฒŒ ๊ณผ์žฅํ•ด์„œ ๋งํ•œ๋‹ค. ๋‹น์—ฐํžˆ ๊ณผ์žฅํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์žฌ๋ฏธ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋˜๋„๋ก์ด๋ฉด ๊ณผ์žฅํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ง€๋ฏผ์ด๋Š” ๊ฑฐ์ง“๋ง์Ÿ์ด๋กœ ์•Œ๋ ค์ง€๊ธฐ๋Š” ์‹ซ์–ดํ•œ๋‹ค. ๋ฌธ์ œ๋Š” ๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ ์ด์•ผ๊ธฐ์˜ ์ง„์‹ค์„ ์•ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ์‚ฌ๋žŒ๋“ค์ด ํŒŒํ‹ฐ์— ์™”์„ ๋•Œ๋Š”, ์ง€๋ฏผ์ด๋Š” ์ง„์‹ค์„ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๋‹น์—ฐํžˆ, ์–ด๋–ค ์‚ฌ๋žŒ์ด ์–ด๋–ค ํŒŒํ‹ฐ์—์„œ๋Š” ์ง„์‹ค์„ ๋“ฃ๊ณ , ๋˜๋‹ค๋ฅธ ํŒŒํ‹ฐ์—์„œ๋Š” ๊ณผ์žฅ๋œ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์—ˆ์„ ๋•Œ๋„ ์ง€๋ฏผ์ด๋Š” ๊ฑฐ์ง“๋ง์Ÿ์ด๋กœ ์•Œ๋ ค์ง€๊ฒŒ ๋œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์ด๋Ÿฐ ์ผ์„ ๋ชจ๋‘ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.
์‚ฌ๋žŒ์˜ ์ˆ˜ 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)

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ ๊ฑฐ์ง“๋ง

 

1043๋ฒˆ: ๊ฑฐ์ง“๋ง

์ง€๋ฏผ์ด๋Š” ํŒŒํ‹ฐ์— ๊ฐ€์„œ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ํŒŒํ‹ฐ์— ๊ฐˆ ๋•Œ๋งˆ๋‹ค, ์ง€๋ฏผ์ด๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ๊ทธ ์ด์•ผ๊ธฐ๋ฅผ ๋งํ•  ๋•Œ, ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ง„์‹ค๋กœ ๋งํ•˜๊ฑฐ๋‚˜ ์—„์ฒญ๋‚˜๊ฒŒ

www.acmicpc.net