https://school.programmers.co.kr/learn/courses/30/lessons/92343
input :
output :
조건 :


DFS를 통해 문제를 해결하려함. 이 경우 basecase를 잘 따져야 하는데 이를 놓침.
2번에 해당하는 경우를 놓친 것이 시간을 많이 소요한 이유였음.
temp에 복사를 해서 not_visited를 동일한 형태로 유지해야 하는 것도 주의 해야함.
def solution(info, edges):
    graph = [[] for _ in range(len(info))]
    def dfs(node, sheep, wolf, not_visit):
        sheep += 1 if not info[node] else 0
        wolf += info[node]
        if sheep <= wolf:
            return sheep
        ans = 0
        for next_node in range(len(not_visit)):
            if not not_visit[next_node]:
                continue
            temp = [i for i in not_visit]
            temp[next_node] = 0
            for idx in graph[next_node]:
                temp[idx] = 1
            ans = max(ans, dfs(next_node, sheep, wolf, temp))
        return max(sheep, ans)
    for a, b in edges:
        graph[a].append(b)
    not_visit = [0] * len(info)
    for idx in graph[0]:
        not_visit[idx] = 1
    return dfs(0, 0, 0, not_visit)