LeetCode 890 可能的二分法 from weekly contest 97(DFS)

把每个人看作无向图中的顶点,如果两个不能分到一组,则看作两点间有一条边。

如果一个连通图满足

1. 无环

2.有环,并且每个环上的顶点数都为偶数

这两个条件中的一个,我们就可以通过 将相邻的顶点分配到不同的组 这个策略来实现二分。

不能二分的情况是连通图中肯定出现了奇数个顶点的环,显然对于这样的环,是无法把所有相邻的顶点分到不同组的

eg 1-2 2-3 3-1 就无法二分

对于非连通图,要求每一个连通分量满足1或2,但是这个题给的数据可能有点弱,我最开始没有考虑不连通的图的代码也AC了2333

渣代码如下

class Solution {
public:
    bool dfs(int k,vector* gh,vector& vis,int flag)
    {
        vis[k]=flag;
        for(int i=0;i>& dislikes) {
        if(N<=2) return true;//一个人或者两个人肯定可以a~~~
        vector vis(N+1,0),gh[2001];
        for(int i=0;i

 

你可能感兴趣的:(搜索)