1. 程式人生 > >HDU-3018 Ant Trip(歐拉回路)

HDU-3018 Ant Trip(歐拉回路)

 1 #include <bits/stdc++.h>
 2 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
 3 using namespace std;
 4 
 5 const int MAXV = 100003;
 6 int V,E,Vis[MAXV];
 7 vector<int> G[MAXV];
 8 
 9 int dfs(int u)
10 {
11     if(Vis[u]) return 0;
12     Vis[u] = 1;
13     int sz = G[u].size(),r = sz&0x1
; 14 _for(i,0,sz) r += dfs(G[u][i]); 15 return r; 16 } 17 18 int main() 19 { 20 for(int a,b,n;cin >> V >> E;n = 0) 21 { 22 _for(i,0,V+1) G[i].clear(); 23 memset(Vis,0,sizeof(Vis)); 24 _for(i,0,E) 25 { 26 cin >> a >> b;
27 if(a==b) continue; 28 G[a-1].push_back(b-1),G[b-1].push_back(a-1); 29 } 30 31 _for(i,0,V) 32 { 33 if(Vis[i] || G[i].empty()) continue; 34 n ++,n += max(0,dfs(i)/2-1); 35 } 36 cout << n << endl;
37 } 38 return 0; 39 }