新的开始
题目链接:新的开始
题目描述
解题思路
我们设一个超级重点,做最小生成树即可。
code
#include<iostream>
#include<cstdio>
using namespace std;
int n,ans;
int v[310];
int dis[310];
int a[310][310];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int t;
scanf("%d",&t);
a[0][i]=a[i][0]=t;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
v[1]=1;
for(int i=0;i<=n;i++)
dis[i]=a[1][i];
for(int i=1;i<=n;i++)
{
int t,minn=0x3f3f3f3f;
for(int j=0;j<=n;j++)
if(!v[j]&&dis[j]<minn)
minn=dis[j],t=j;
v[t]=1;
ans+=minn;
for(int j=0;j<=n;j++)
if(dis[j]>a[t][j])
dis[j]=a[t][j];
}
cout<<ans<<endl;
}