ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
๊ทธ๋ํ์ ์ฐ๊ฒฐ ์ ๋ณด๊ฐ ์ฃผ์ด์ง ๋, ์ด๋ถ ๊ทธ๋ํ์ธ์ง ํ๋จํ์ฌ ์ด๋ถ ๊ทธ๋ํ์ ๊ฒฝ์ฐ 'YES' ์๋ ๊ฒฝ์ฐ๋ 'NO'๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์ด๋ถ ๊ทธ๋ํ์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค. ์ด๋ถ ๊ทธ๋ํ๋ฅผ ๋ง์กฑํ๊ธฐ ์ํด์๋ 2๊ฐ์ง ์กฐ๊ฑด์ด ํ์ํ๋ค. ์ฒซ ๋ฒ์งธ๋ก ํ ์ ์ ์์ ๋ค๋ฅธ ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ, ์๋ก ๋ค๋ฅธ ๊ทธ๋ฃน์ด์ด์ผ ํ๋ค. ๋ ๋ฒ์งธ, ๋ชจ๋ ๊ทธ๋ฃน์ 2๊ฐ๋ก ๋๋์ด์ผ ํ๋ค๋ ์กฐ๊ฑด์ด ์๋ค.
๋ฌธ์ ์ ์์ ์ ๋ ฅ 1์ ํ ์คํธ ์ผ์ด์ค๊ฐ 1, 2๋ก ๋๋๋๋ฐ ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค. ํ ์คํธ ์ผ์ด์ค 1์ ์ฐ๊ฒฐ๋ ์ ์ ๋ค์ ์๋ก ๋ค๋ฅธ ๊ทธ๋ฃน(์๊น)๋ก ๊ตฌ๋ถํ ์ ์์ด ์ด๋ถ ๊ทธ๋ํ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง๋ง, ํ ์คํธ ์ผ์ด์ค 2๋ ๋นจ๊ฐ์ ๊ฐ์ ์ผ๋ก ์ธํด ์ด๋ถ ๊ทธ๋ํ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ ๊ฒ์ ์ ์ ์๋ค. ๋ฐ๋ผ์ BFS๋ฅผ ํตํด ์ํํ๋ฉด์ ํ์ฌ ์ ์ ์์ ๋ค๋ฅธ ์ ์ ์ผ๋ก ๊ฐ ๊ฒฝ์ฐ, ๊ทธ๋ฃน์ผ๋ก ๋ถ๋ฅ๋์๋ค๋ฉด ํด๋น ๊ทธ๋ฃน๊ณผ ๋ค๋ฅธ์ง ํ๋จํ์ฌ์ผ ํ๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def bfs(start):
q = deque([start])
while q:
cur_node = q.popleft()
for next_node in graph[cur_node]:
if not check[next_node]:
check[next_node] = -check[cur_node]
q.append(next_node)
elif check[cur_node] == check[next_node]:
return False
return True
if __name__ == "__main__":
tc = int(stdin.readline())
for _ in range(tc):
v, e = map(int, stdin.readline().split())
graph = [[] for _ in range(v)]
check = [0] * v
answer = False
for _ in range(e):
a, b = map(int, stdin.readline().split())
a, b = a - 1, b - 1
graph[a].append(b)
graph[b].append(a)
for i in range(v):
if not check[i]:
check[i] = 1
if not bfs(i):
break
else:
answer = True
print('YES' if answer else 'NO')
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1697 ์จ๋ฐ๊ผญ์ง (0) | 2020.07.23 |
---|---|
๋ฐฑ์ค: 16929 Two Dots (0) | 2020.07.23 |
๋ฐฑ์ค: 7526 ๋์ดํธ์ ์ด๋ (0) | 2020.07.22 |
๋ฐฑ์ค: 7576 ํ ๋งํ (0) | 2020.07.22 |
๋ฐฑ์ค: 2178 ๋ฏธ๋ก ํ์ (0) | 2020.07.21 |