记录编号 38334 评测结果 AAAAAATTTAAAAAATA
题目名称 牛棚的灯 最终得分 76
用户昵称 Gravatar苏轼 是否通过 未通过
代码语言 C++ 运行时间 5.330 s
提交时间 2012-04-17 16:01:28 内存使用 0.27 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<vector>
  5. using namespace std;
  6. int n,m,f[40]={0};
  7. bool used[40]={0};
  8. typedef vector<int>vec;
  9. vec a[40];
  10. int w[40],answer=100;
  11. void dfs(int x,int y,int z);
  12. int main()
  13. {
  14. freopen ("lights.in","r",stdin);
  15. freopen ("lights.out","w",stdout);
  16. cin>>n>>m;
  17. for (int i=0;i<m;i++)
  18. {
  19. int b,c;
  20. cin>>b>>c;
  21. a[b].push_back(c);
  22. a[c].push_back(b);
  23. }
  24. for (int i=1;i<=n;i++)
  25. {
  26. a[i].push_back(i);
  27. f[i]=i;
  28. }
  29. for (int i=1;i<n;i++)
  30. {
  31. for (int j=i+1;j<=n;j++)
  32. {
  33. if (a[i].size()<a[j].size())
  34. {
  35. int tmp;
  36. tmp=f[j];
  37. f[j]=f[i];
  38. f[i]=tmp;
  39. }
  40. }
  41. }
  42. dfs(0,0,0);
  43. cout<<answer;
  44. return 0;
  45. }
  46.  
  47. void dfs(int x,int y,int z)
  48. {
  49. if (y==n&&x==n)
  50. {
  51. if (z<answer)
  52. answer=z;
  53. return;
  54. }
  55. if (x==n)
  56. return;
  57. if (z>answer)
  58. return;
  59. int yy;
  60. bool use[40]={0};
  61. yy=y;
  62. for (int i=1;i<=n;i++)
  63. use[i]=used[i];
  64. for (int i=0;i<2;i++)
  65. {
  66. if (i==1)
  67. {
  68. x++;
  69. for (int j=0;j<a[f[x]].size();j++)
  70. {
  71. if (used[a[f[x]][j]])
  72. {
  73. used[a[f[x]][j]]=0;
  74. y--;
  75. }
  76. else
  77. {
  78. if(!used[a[f[x]][j]])
  79. {
  80. used[a[f[x]][j]]=1;
  81. y++;
  82. }
  83. }
  84. }
  85. dfs(x,y,z+1);
  86. x--;
  87. y=yy;
  88. for (int i=1;i<=n;i++)
  89. used[i]=use[i];
  90. }
  91. if (i==0)
  92. {
  93. dfs(x+1,y,z);
  94. }
  95. y=yy;
  96. for (int i=1;i<=n;i++)
  97. used[i]=use[i];
  98. }
  99. }