记录编号 554464 评测结果 AAAAAAAAAA
题目名称 通信线路 最终得分 100
用户昵称 GravatarZooxTark➲ 是否通过 通过
代码语言 C++ 运行时间 0.779 s
提交时间 2020-09-13 13:58:22 内存使用 15.25 MiB
显示代码纯文本
  1. #define INF 0x7f7f7f7f
  2. #include <iostream>
  3. #include <queue>
  4. #include <cstdio>
  5. #include <cstring>
  6.  
  7. using namespace std;
  8.  
  9. int n;
  10. int connections[2100][2100];
  11. int minD[2100],parent[2100];
  12. int ans;
  13. bool inset[2100];
  14. struct Searcher
  15. {
  16. int num,dis;
  17. Searcher(int n = 0,int d = 0)
  18. {
  19. num = n,dis = d;
  20. }
  21. friend bool operator < (Searcher __x, Searcher __y)
  22. {
  23. return __x.dis > __y.dis;
  24. }
  25. };
  26. priority_queue<Searcher> schr;
  27.  
  28. int Prim(int start)
  29. {
  30. memset(minD,0x7f,sizeof(minD));
  31. memset(parent,-1,sizeof(parent));
  32. minD[start] = 0;
  33. schr.push(Searcher(start,0));
  34. while(!schr.empty())
  35. {
  36. Searcher s = schr.top();
  37. schr.pop();
  38. if(!inset[s.num])
  39. {
  40. inset[s.num] = true;
  41. for(int i = 1;i <= n;i++)
  42. {
  43. if(!inset[i] && connections[s.num][i] < minD[i])
  44. {
  45. parent[i] = s.num;
  46. minD[i] = connections[s.num][i];
  47. schr.push(Searcher(i,minD[i]));
  48. }
  49. }
  50. }
  51. }
  52. for(int i = 1;i <= n;i++)
  53. {
  54. ans += minD[i];
  55. }
  56. return ans;
  57. }
  58.  
  59. int main()
  60. {
  61. freopen("mcst.in","r",stdin);
  62. freopen("mcst.out","w",stdout);
  63. cin >> n;
  64. int a;
  65. for(int i = 1;i <= n;i++)
  66. {
  67. for(int j = 1;j <= n;j++)
  68. {
  69. cin >> a;
  70. connections[i][j] = (a > -1 ? a : INF);
  71. }
  72. }
  73. cout << Prim(1);
  74. return 0;
  75. }