比赛 20151026 评测结果 EEEEEEETTW
题目名称 游历校园 最终得分 0
用户昵称 mikumikumi 运行时间 4.145 s
代码语言 C++ 内存使用 27.80 MiB
提交时间 2015-10-26 21:41:08
显示代码纯文本
  1. #include<cstdio>
  2. #include<deque>
  3. #include<iostream>
  4. using namespace std;
  5. const int SIZEN=100010,SIZEM=500010,INF=0x7fffffff/2;
  6. int N,M,tot=0,d[SIZEN]={0};
  7. deque<int> s[SIZEN];
  8. int ans=INF;
  9. class miku
  10. {
  11. public:
  12. int fr,to;
  13. bool t;
  14. miku(){}
  15. miku(int a,int b,int c)
  16. {
  17. fr=a,to=b,t=c;
  18. }
  19. }E[SIZEM*2];
  20. void add(int fr,int to)
  21. {
  22. s[fr].push_back(tot);
  23. E[tot++]=miku(fr,to,0);
  24. s[to].push_back(tot);
  25. E[tot++]=miku(to,fr,0);
  26. d[fr]++;d[to]++;
  27. }
  28. void read()
  29. {
  30. scanf("%d%d",&N,&M);
  31. int fr,to;
  32. for(int i=1;i<=M;i++)
  33. {
  34. scanf("%d%d",&fr,&to);
  35. add(fr,to);
  36. }
  37. }
  38. void dfs(int x,int now)
  39. {
  40. if(now>=ans) return;
  41. //cout<<x<<" "<<d[x]<<endl;
  42. if(d[x]==0)
  43. {
  44. int flag=0;
  45. for(int i=1;i<=N;i++)
  46. {
  47. if(d[i]!=0)
  48. {
  49. dfs(i,now+1);
  50. flag=1;
  51. }
  52. }
  53. if(!flag) ans=now;
  54. return;
  55. }
  56. for(int i=0;i<s[x].size();i++)
  57. {
  58. //cout<<x<<endl;
  59. miku &v=E[s[x][i]];
  60. //cout<<v.fr<<" "<<v.to<<endl;
  61. if(v.t==1) continue;
  62. v.t=1;E[s[x][i]^1].t=1;d[v.fr]--;d[v.to]--;
  63. dfs(v.to,now);
  64. v.t=0;E[s[x][i]^1].t=0;d[v.fr]++;d[v.to]++;
  65. }
  66. //cout<<"*****"<<endl;
  67. }
  68. void work()
  69. {
  70. dfs(1,0);
  71. printf("%d",ans);
  72. }
  73. int main()
  74. {
  75. freopen("sent.in","r",stdin);
  76. freopen("sent.out","w",stdout);
  77. read();
  78. work();
  79. return 0;
  80. }