记录编号 |
596008 |
评测结果 |
AAAAAAAAAA |
题目名称 |
最优布线问题 |
最终得分 |
100 |
用户昵称 |
qyd |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.060 s |
提交时间 |
2024-10-19 19:42:46 |
内存使用 |
7.18 MiB |
显示代码纯文本
- #include<iostream>
- #include<cstring>
- using namespace std;
- const int maxn=1505;
- int n,ans=0;
- int c[maxn][maxn];
- void Prim(int s){
- bool used[maxn]={0};
- int f[maxn]={0};
- int i,sum,min=-1;
- for(i=1;i<=n;i++)f[i]=c[s][i];
- used[s]=1;sum=1;
- while(sum<n)
- {
- min=-1;
- for(i=1;i<=n;i++){
- if(used[i])continue;
- if(min==-1||f[i]<f[min])min=i;
- }
- if(min==-1)break;
- sum++;used[min]=1;ans+=f[min];
- for(i=1;i<=n;i++){
- if(used[i])continue;
- if(c[min][i]<f[i])f[i]=c[min][i];
- }
- }
- return ;
- }
- int main()
- {
- freopen("wire.in","r",stdin);
- freopen("wire.out","w",stdout);
- cin>>n;
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++)
- cin>>c[i][j];
- Prim(1);
- cout<<ans<<endl;
- return 0;
- }