我知道要用kruskal
,但是我就是不信邪
#include<bits/stdc++.h>
using namespace std;
int n,m,cost[505],xb,ans;
struct ss
{
int x1,x2,sum;
}a[250005];
bool cmp(ss l,ss r)
{
return l.sum<r.sum;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;++i)
for(int j=1;j<=m;++j)
{
int ls;
cin>>ls;
if(i>=j||ls==0)
continue;
++xb;
a[xb].x1=i;
a[xb].x2=j;
a[xb].sum=ls;
}
sort(a+1,a+1+xb,cmp);
for(int i=1;i<=m;++i)
cost[i]=n;
for(int i=1;i<=xb;++i)
{
int x1=a[i].x1;
int x2=a[i].x2;
int sum=a[i].sum;
if(cost[x1]+cost[x2]>sum+min(cost[x1],cost[x2]))
{
ans+=sum+min(cost[x1],cost[x2]);
cost[x1]=0;
cost[x2]=0;
}
}
for(int i=1;i<=m;++i)
ans+=cost[i];
cout<<ans<<'\n';
}