자격증/PCCP

[Graph] 알고리즘 및 문제풀이

멍멍코 2024. 2. 29. 23:59

그래프는 회로가 존재할 수 있지만

트리는 회로가 존재하지 않음(트리는 회로가 없기 때문에, 어느 한 선을 끊어주면은 둘로 나뉜다)

회로가 없는 그래프라고 가정하고 풀기

차례로 하나씩 끊어보기

check 배열 ch를 만들기

3-4를 끊고싶으면 ch[4]=1로 해놓고 DFS(3)을 돌려보기

 

def DFS(v,ch,graph)
 global cnt
 cnt += 1
 for i in graph[v]:
  if ch[i]==0
   DFS(i,ch,graph)

 

전체 코드

cnt = 0
def DFS(v, ch, graph):
    global cnt
    ch[v] = 1
    cnt += 1
    for i in graph[v]:
        if ch[i] == 0:
            DFS(i, ch, graph)

def solution(n, wires):
    global cnt
    answer = n+1
    graph = [[] for _ in range(n+1)]
    for v1, v2 in wires:
        graph[v1].append(v2)
        graph[v2].append(v1)

    for v1, v2 in wires:
        ch = [0]*(n+1)
        ch[v2] = 1
        cnt = 0
        DFS(v1, ch, graph)
        answer = min(answer, abs(cnt-(n-cnt)))

    return answer