Advertisement
Emiliatan

c889

Jun 2nd, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. /* c889              */
  2. /* AC (0.3s, 16.8MB) */
  3. #include <cstdio>
  4. #include <vector>
  5. #include <queue>
  6. #include <cstring>
  7.  
  8. using namespace std;
  9.  
  10. enum {undefine = -1, white, black};
  11.  
  12. int n, m, a, b, Cnt[2]{}, vex_color[100001];
  13. vector<int> v[100001];
  14.  
  15. bool bfs(int root)
  16. {
  17.     if(vex_color[root] != undefine) return true;
  18.  
  19.     queue<int> q;
  20.  
  21.     int now;
  22.  
  23.     vex_color[root]=black;
  24.     Cnt[vex_color[root]]++;
  25.  
  26.     q.emplace(root);
  27.  
  28.     while(q.size())
  29.     {
  30.         now = q.front(); q.pop();
  31.  
  32.         for(auto nex : v[now])
  33.             if(vex_color[nex] == undefine)
  34.             {
  35.                 vex_color[nex] = (vex_color[now] == black ? white : black);
  36.                 ++Cnt[vex_color[nex]];
  37.                 q.emplace(nex);
  38.             }
  39.             else if(vex_color[nex] == vex_color[now])
  40.                 return false;
  41.     }
  42.     return true;
  43. }
  44. int main()
  45. {
  46.     bool yes = true;
  47.     int minx = 0;
  48.  
  49.     memset(vex_color, undefine, sizeof(vex_color));
  50.  
  51.     scanf("%d %d", &n, &m);
  52.  
  53.     for(int i = 0; i < m && scanf("%d %d", &a, &b); ++i)
  54.     {
  55.         v[a].emplace_back(b);
  56.         v[b].emplace_back(a);
  57.     }
  58.  
  59.     for(int i = 1; i <= n; ++i)
  60.     {
  61.         Cnt[0] = Cnt[1] = 0;
  62.         yes &= bfs(i);
  63.         minx += min(Cnt[0], Cnt[1]);
  64.     }
  65.  
  66.     if(yes) printf("%d", minx);
  67.     else putchar('0');
  68.  
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement