๐Ÿค–/๋ฐฑ์ค€

๋ฐฑ์ค€ 1707: ์ด๋ถ„๊ทธ๋ž˜ํ”„ (Python)

sssbin 2022. 2. 3. 22:47

 

https://www.acmicpc.net/problem/1707

 

1707๋ฒˆ: ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ •์ ์˜ ๊ฐœ์ˆ˜ V์™€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ E๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์—

www.acmicpc.net

 

๋‚  ์•„์ฃผ์•„์ฃผ์•„์ฃผ์•„์ฃผ ํ™”๋‚˜๊ฒŒ ํ•œ ๋ฌธ์ œ๋‹ค

๋งž๋Š” ๊ฑฐ ๊ฐ™์€๋ฐ ์ž๊พธ ํ‹€๋ ค์„œ ์—ด์‹ฌํžˆ ๋ฐ˜๋ก€ ์ฐพ๊ณ  ๋‹ค๋…”๋‹ค

 

์˜ˆ์‹œ ์ž…๋ ฅ1
2
3 2
1 3
2 3
4 4
1 2
2 3
3 4
4 2
์˜ˆ์‹œ ์ถœ๋ ฅ1
YES
NO

 

์˜ˆ์‹œ ์ž…๋ ฅ2
11 
3 1 
2 3 
3 2 
1 3 
2 3 
4 4 
1 2 
2 3 
3 4 
4 2 
3 2 
2 1 
3 2 
4 4 
2 1 
3 2 
4 3 
4 1 
5 2 
1 5 
1 2 
5 2 
1 2 
2 5 
4 3 
1 2 
4 3 
2 3 
4 4 
2 3 
1 4 
3 4 
1 2 
3 3 
1 2 
2 3 
3 1 
2 1 
1 2
์˜ˆ์‹œ ์ถœ๋ ฅ2
YES 
YES 
NO 
YES 
YES 
YES 
YES 
YES 
YES 
NO 
YES

 

์˜ˆ์‹œ ์ž…๋ ฅ3
1 
4 3 
1 4 
2 3 
3 4
์˜ˆ์‹œ ์ถœ๋ ฅ3
YES 

 

์˜ˆ์‹œ ์ž…๋ ฅ4
1
5 4
1 2
3 4
3 5
4 5
์˜ˆ์‹œ ์ถœ๋ ฅ4
NO

 

 

from collections import deque

k = int(input())
res = [[] for _ in range(k)]

def bfs(x):
    queue = deque()
    queue.append(x)

    flag = 0
    visited[x] = [1, flag]

    while queue:
        q = queue.popleft()
        flag = 1 - visited[q][1]

        for i in graph[q]:
            if visited[i][0] == 0:
                queue.append(i)
                visited[i] = [1, flag]
                for j in graph[i]:
                    if visited[i][1] == visited[j][1]:
                        return False

    return True

for i in range(k):
    v, e = map(int, input().split())
    graph = [[] for _ in range(v+1)]
    visited = [[0, 20000] for _ in range(v + 1)]
    res[i] = "YES"
    for j in range(e):
        data = input().split()
        graph[int(data[0])].append(int(data[1]))
        graph[int(data[1])].append(int(data[0]))
    for l in range(1, v+1):
        if visited[l][0] == 0:
            if not bfs(l):
                res[i] = "NO"
                break

for i in range(k):
    print(res[i])

 

 

์ผ๋‹จ ๋‚ด๊ฐ€ ๊ฐ„๊ณผํ–ˆ๋˜ ์ ์€ ๊ทธ๋ž˜ํ”„ ์ „์ฒด๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒƒ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

bfs๋ฅผ ๋Œ๋ฆด ๋•Œ ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๋“ค์„ ๋ชจ๋‘ ๋Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค

์ง„์งœ ๋„ˆ๋ฌด ํž˜๋“ค์—ˆ๋‹ค,,,,,,,, ๋œ ๊ฑฐ ๊ฐ™์€๋ฐ?! ํ•˜๋ฉด ์ž๊พธ ํ‹€๋ฆฐ ๋ฐ˜๋ก€๊ฐ€ ๋‚˜์˜ดใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ธ ๊ฑฐ ๊ฐ™์•„์„œ ์ข€ ๊ณ ์ณ์„œ ํŒŒ์ด์ฌ3์œผ๋กœ ๋‹ค์‹œ ๋Œ๋ ค๋ณด๋ ค๊ณ  ํ•˜๋Š”๋ฐ

์ผ๋‹จ ์ง€๊ธˆ์€ ๊ธฐ๋นจ๋ ค์„œ ๋”์ด์ƒ ์ณ๋‹ค๋ณด๊ณ  ์‹ถ์ง€ ์•Š์œผ๋‹ˆ ๋‹ค์Œ์— ํ•ด์•ผ๊ฒ ๋‹ค

 

๋งจ ๋งˆ์ง€๋ง‰ ์ œ์ถœ์€ ์‹ค์ˆ˜๋กœ ๋‘๋ฒˆ ๋ˆŒ๋Ÿฌ์„œ,,,,