记录编号 575820 评测结果 AAAAAAAAAAA
题目名称 中心台站建设 最终得分 100
用户昵称 Gravatar惠惠 是否通过 通过
代码语言 C++ 运行时间 0.016 s
提交时间 2022-09-28 20:11:26 内存使用 1.81 MiB
显示代码纯文本
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n, now[110] = {0}, b = 1, now_plan[110], plan[10010][110], ans = 200;
  4. bool t[110][110] = {0};
  5. void go(int need, int now_s)
  6. {
  7. if(need > ans) return;
  8. now_plan[need] = now_s;
  9. for(int i = 1; i <= n; ++i)
  10. {
  11. if(t[now_s][i] == 1) ++now[i];
  12. }
  13. bool done = true;
  14. bool searched[110] = {0};
  15. for(int i = 1; i <= n; ++i)
  16. {
  17. if(now[i] == 0)
  18. {
  19. done = false;
  20. for(int j = now_s + 1; j <= n && !searched[j]; ++j)
  21. {
  22. if(t[j][i] == 1)
  23. {
  24. searched[j] = true;
  25. go(need + 1, j);
  26. }
  27. }
  28. }
  29. }
  30. if(done)
  31. {
  32. if(need < ans)
  33. {
  34. b = 1;
  35. ans = need;
  36. }
  37. else ++b;
  38. for(int i = 1; i <= need; ++i)
  39. {
  40. plan[b][i] = now_plan[i];
  41. }
  42. }
  43. for(int i = 1; i <= n; ++i)
  44. {
  45. if(t[now_s][i] == 1) --now[i];
  46. }
  47. return;
  48. }
  49.  
  50. int main()
  51. {
  52. freopen("zpj.in", "r", stdin);
  53. freopen("zpj.out", "w", stdout);
  54. scanf("%d", &n);
  55. for(int i = 1; i <= n; ++i)
  56. {
  57. for(int j = 1; j <= n; ++j)
  58. {
  59. scanf("%d", &t[i][j]);
  60. }
  61. t[i][i] = 1;
  62. }
  63. for(int i = 1; i <= n; ++i)
  64. {
  65. go(1, i);
  66. }
  67. printf("%d\n%d\n", ans, b);
  68. for(int i = 1; i <= b; ++i)
  69. {
  70. for(int j = 1; j <= ans; ++j)
  71. {
  72. printf("%d ", plan[i][j]);
  73. }
  74. printf("\n");
  75. }
  76. return 0;
  77. }