Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAX 100000
- using namespace std;
- typedef long long ll;
- enum color {WHITE,GRAY,BLACK};
- vector<vector<ll>> adjList;
- color vertex_color[MAX+1];
- vector<ll> node_count;
- ll parent[MAX+1];
- ll N,M;
- void addEdge(ll u, ll v)
- {
- adjList[u].push_back(v);
- }
- void DFS_VISIT(ll u)
- {
- vertex_color[u] = GRAY;
- for(ll i = 0; i < adjList[u].size(); i++)
- {
- ll v = adjList[u][i];
- if(vertex_color[v] == WHITE)
- {
- parent[v] = u;
- DFS_VISIT(v);
- node_count[u] += node_count[v];
- }
- }
- node_count[u] += 1;
- vertex_color[u] = BLACK;
- }
- void DFS()
- {
- for(ll i = 1; i <= N; i++)
- {
- vertex_color[i] = WHITE;
- parent[i] = 0;
- }
- for(ll i = 1; i <= N; i++)
- {
- if(vertex_color[i] == WHITE)
- {
- DFS_VISIT(i);
- }
- }
- }
- int main()
- {
- ll edges = 0;
- cin >> N >> M;
- adjList.resize(N+1);
- for(ll i = 1; i <= M; i++)
- {
- ll u,v;
- cin >> u >> v;
- addEdge(u,v);
- addEdge(v,u);
- }
- node_count.resize(N+1);
- for(ll i = 1; i <= N; i++)
- {
- node_count[i] = 0;
- }
- DFS();
- for(ll i = 1; i <= N; i++)
- {
- cout << i << ": " << node_count[i] << endl;
- }
- for(ll i = 2; i <= N; i++)
- {
- ll x = node_count[i];
- if(x%2 == 0)
- edges++;
- }
- cout << edges << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement