记录编号 596008 评测结果 AAAAAAAAAA
题目名称 最优布线问题 最终得分 100
用户昵称 Gravatarqyd 是否通过 通过
代码语言 C++ 运行时间 2.060 s
提交时间 2024-10-19 19:42:46 内存使用 7.18 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. const int maxn=1505;
  5. int n,ans=0;
  6. int c[maxn][maxn];
  7. void Prim(int s){
  8. bool used[maxn]={0};
  9. int f[maxn]={0};
  10. int i,sum,min=-1;
  11. for(i=1;i<=n;i++)f[i]=c[s][i];
  12. used[s]=1;sum=1;
  13. while(sum<n)
  14. {
  15. min=-1;
  16. for(i=1;i<=n;i++){
  17. if(used[i])continue;
  18. if(min==-1||f[i]<f[min])min=i;
  19. }
  20. if(min==-1)break;
  21. sum++;used[min]=1;ans+=f[min];
  22. for(i=1;i<=n;i++){
  23. if(used[i])continue;
  24. if(c[min][i]<f[i])f[i]=c[min][i];
  25. }
  26. }
  27. return ;
  28. }
  29. int main()
  30. {
  31. freopen("wire.in","r",stdin);
  32. freopen("wire.out","w",stdout);
  33. cin>>n;
  34. for(int i=1;i<=n;i++)
  35. for(int j=1;j<=n;j++)
  36. cin>>c[i][j];
  37. Prim(1);
  38. cout<<ans<<endl;
  39. return 0;
  40. }