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
- 最新
- 最热
只看作者