엔지니어 게시판
LeetCode 솔루션 분류

[12/21] 886. Possible Bipartition

컨텐츠 정보

본문

We want to split a group of n people (labeled from 1 to n) into two groups of any size. Each person may dislike some other people, and they should not go into the same group.

Given the integer n and the array dislikes where dislikes[i] = [ai, bi] indicates that the person labeled ai does not like the person labeled bi, return true if it is possible to split everyone into two groups in this way.

 

Example 1:

Input: n = 4, dislikes = [[1,2],[1,3],[2,4]]
Output: true
Explanation: group1 [1,4] and group2 [2,3].

Example 2:

Input: n = 3, dislikes = [[1,2],[1,3],[2,3]]
Output: false

Example 3:

Input: n = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]]
Output: false

 

Constraints:

  • <li style="border: 0px solid; box-sizing: border-box; --tw-border-spacing-x:0; --tw-border-spacing-y:0; --tw-translate-x:0; --tw-translate-

관련자료

댓글 1

학부유학생님의 댓글

  • 익명
  • 작성일
from collections import defaultdict
class Solution:
    def possibleBipartition(self, n: int, dislikes: List[List[int]]) -> bool:
        if n == 1 or not dislikes: return True
        NO_COLOR, RED, BLUE = 0,1,-1

        color_map = defaultdict(int)
        dislike_map = defaultdict(list)

        for p1, p2 in dislikes:
            dislike_map[p1].append(p2)
            dislike_map[p2].append(p1)

        def dfs(person, color):
            color_map[person] = color

            for xlikep in dislike_map[person]:
                if color_map[xlikep] == color: return False
                if color_map[xlikep] == NO_COLOR and not dfs(xlikep, -color): return False
            
            return True
        
        for person in range(1, n+1):
            if color_map[person] == NO_COLOR and not dfs(person, RED):
                return False
        
        return True
        
전체 404 / 1 페이지
번호
제목
이름

최근글


인기글


새댓글


Stats


알림 0