Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* c889 */
- /* AC (0.3s, 16.8MB) */
- #include <cstdio>
- #include <vector>
- #include <queue>
- #include <cstring>
- using namespace std;
- enum {undefine = -1, white, black};
- int n, m, a, b, Cnt[2]{}, vex_color[100001];
- vector<int> v[100001];
- bool bfs(int root)
- {
- if(vex_color[root] != undefine) return true;
- queue<int> q;
- int now;
- vex_color[root]=black;
- Cnt[vex_color[root]]++;
- q.emplace(root);
- while(q.size())
- {
- now = q.front(); q.pop();
- for(auto nex : v[now])
- if(vex_color[nex] == undefine)
- {
- vex_color[nex] = (vex_color[now] == black ? white : black);
- ++Cnt[vex_color[nex]];
- q.emplace(nex);
- }
- else if(vex_color[nex] == vex_color[now])
- return false;
- }
- return true;
- }
- int main()
- {
- bool yes = true;
- int minx = 0;
- memset(vex_color, undefine, sizeof(vex_color));
- scanf("%d %d", &n, &m);
- for(int i = 0; i < m && scanf("%d %d", &a, &b); ++i)
- {
- v[a].emplace_back(b);
- v[b].emplace_back(a);
- }
- for(int i = 1; i <= n; ++i)
- {
- Cnt[0] = Cnt[1] = 0;
- yes &= bfs(i);
- minx += min(Cnt[0], Cnt[1]);
- }
- if(yes) printf("%d", minx);
- else putchar('0');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement