二分图染色法板子

 1 #include <iostream>
 2 #include <string.h>
 3 using namespace std;
 4 
 5 const int N = 100009;
 6 int h[N],e[2*N],ne[2*N],idx;
 7 int n,m,color[N];
 8 void add(int a,int b)
 9 {
10     e[idx] = b;
11     ne[idx] = h[a];
12     h[a] = idx++;
13 }
14 
15 bool dfs(int u,int c)
16 {
17     color[u] = c;
18     for(int i = h[u];i != -1;i = ne[i])
19     {
20         int j = e[i];
21         if(!color[j] && !dfs(j,3 - c))  
22             return false;
23         else if(color[j] == c)
24             return false;
25     }
26     return true;
27 }
28 
29 int main()
30 {
31     memset(h,-1,sizeof h);
32     cin >> n >> m;
33     while(m--)
34     {
35         int a,b;
36         cin >> a >> b;
37         add(a,b);
38         add(b,a);
39     }
40     bool flag = true;
41     for(int i = 1;i <= n;++i)
42     {
43         if(!color[i] && !dfs(i,1))
44         {
45             flag = false;
46             break;
47         }
48     }
49     if(flag)
50         cout << "Yes" << endl;
51     else
52         cout << "No" << endl;
53     return 0;
54 }

 

posted @ 2021-10-22 10:54  Modest-Hamilton  阅读(33)  评论(0)    收藏  举报