比赛 20151026 评测结果 AAAAAAAAAA
题目名称 游历校园 最终得分 100
用户昵称 zhengtn03 运行时间 0.986 s
代码语言 C++ 内存使用 1.84 MiB
提交时间 2015-10-26 20:47:26
显示代码纯文本
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<vector>
  7. #include<set>
  8. #include<map>
  9. #include<queue>
  10. #include<stack>
  11. #include<sstream>
  12. #include<iomanip>
  13. #include<stdlib.h>
  14. using namespace std;
  15.  
  16. vector<int> G[100010];
  17. int used[100010];
  18. int oddNumber;
  19.  
  20. int DFS(int point)
  21. {
  22. int temp = G[point].size();
  23. if (temp % 2 == 1)
  24. {
  25. oddNumber++;
  26. }
  27. int ans = 1;
  28. used[point] = 1;
  29. for (int i = 0; i < G[point].size(); i++)
  30. {
  31. if (used[G[point][i]] == 0)
  32. {
  33. ans += DFS(G[point][i]);
  34. }
  35. }
  36. return ans;
  37. }
  38.  
  39. int main()
  40. {
  41. freopen("sent.in", "r", stdin);
  42. freopen("sent.out", "w", stdout);
  43. int n, m;
  44. scanf("%d%d", &n, &m);
  45. for (int i = 0; i < m; i++)
  46. {
  47. int point1, point2;
  48. scanf("%d%d", &point1, &point2);
  49. point1--;
  50. point2--;
  51. G[point1].push_back(point2);
  52. G[point2].push_back(point1);
  53. }
  54. int ans = 0;
  55. for (int i = 0; i < n; i++)
  56. {
  57. if (used[i] == 0)
  58. {
  59. oddNumber = 0;
  60. int pointNumber = DFS(i);
  61. if (pointNumber != 1)
  62. {
  63. ans++;
  64. if (oddNumber >= 2)
  65. {
  66. ans += (oddNumber - 2) / 2;
  67. }
  68. }
  69. }
  70. }
  71. ans--;
  72. printf("%d\n", ans);
  73. return 0;
  74. }