#include <iostream>
#include <algorithm>
using namespace std;
struct Edge
{
int u, v, w;
};
int a, b;
Edge e[25004];
int cnt;
int fa[502];
int kcnt;
int ans;
bool cmp(Edge x, Edge y)
{
return x.w < y.w;
}
int find(int x)
{
while(x != fa[x]) x = fa[x] = fa[fa[x]];
return x;
}
void kruscal()
{
sort(e + 1, e + 1 + cnt, cmp);
for(int i = 1; i <= cnt; i++)
{
int fu = find(e[i].u);
int fv = find(e[i].v);
if(fu == fv)
{
continue;
}
ans += e[i].w;
fa[fv] = fu;
}
return;
}
int main()
{
cin >> a >> b;
for(int i = 1; i <= b; i++)
{
for(int j = 1; j <= b; j++)
{
int k;
cin >> k;
if(k != 0)
{
cnt++;
e[cnt].u = i;
e[cnt].v = j;
e[cnt].w = k;
}
}
}
for(int i = 1; i <= b; i++)
{
fa[i] = i;
cnt++;
e[cnt].u = 0;
e[cnt].v = i;
e[cnt].w = a;
}
kruscal();
cout << ans << endl;
return 0;
}
WA on #10 #11 #12