力扣每日一题

https://leetcode.cn/problems/possible-bipartition/

题目:

给定一组 n 人(编号为 1, 2, …, n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。

给定整数 n 和数组 dislikes ,其中 dislikes[i] = [ai, bi] ,表示不允许将编号为 ai 和  bi的人归入同一组。当可以用这种方法将所有人分进两组时,返回 true;否则返回 false。

题目解析:通过描述我们可以知道和ai和bi一定是属于不同的组里面的,所以我们可以使用染色法来实现判断能不能将它们分成两个组,与ai互相不喜欢的染色成其它颜色,判断会不会有冲突,没有冲突说明可以分成两个组。

class Solution {
public:
    bool possibleBipartition(int n, vector<vector<int>>& dislikes) {
        vector<int> color(n + 1, 0);
        vector<vector<int>> g(n + 1);
        for (auto& p : dislikes) {
            g[p[0]].push_back(p[1]);
            g[p[1]].push_back(p[0]);
        }
        for(int i=1;i<=n;i++)
        {
            if(color[i]==0)
            {
                queue<int>q;
                q.push(i);
                color[i]=1;
                while(!q.empty())
                {
                    auto t=q.front();
                    q.pop();
                    for(auto &ne:g[t])
                    {
                        if(color[ne]>0&&color[ne]==color[t])
                        {
                            return false;
                        }
                        if(color[ne]==0)
                        {
                            color[ne]=3^color[t];
                            q.push(ne);
                        }
                    }
                }
            }
        }
        return true;
        
    }
};

 

 

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片