/*
题意:QS之间互相通信分别需要一定价钱的cable以及QS与每个其它QS相连都需要一个adapter,每个QS都有自己
喜欢的adapter(即第i个QS用固定价格的adapter),给出n个adapter的价格以及n*n的矩阵(表示i,j连接的cable
的价格),求最少用多少钱;
题解:模板水题,最小生成树prim
在输入n*n的矩阵时顺便把adapter的费用也加入边中,每条边相连需要两个adapter
*/
#include <iostream>
#include <cstring>
using namespace std;
#define VERMAX 1005
int map[VERMAX][VERMAX];
int adapter[VERMAX];
int prim(int n)
{
bool vis[VERMAX];
int low[VERMAX];
int pos = 1;
memset(vis,false,sizeof(vis));
vis[pos] = true;
int ret = 0;
for(int i=1; i<=n; i++)
low[i] = map[pos][i];
for(int i=1; i<n; i++)
{
int min = 100000000;
for(int j=1; j<=n; j++)
{
if (!vis[j] && low[j] < min)
{
min = low[j];
pos = j;
}
}
ret += min;
vis[pos] = true;
for(int j=1; j<=n; j++)
if (!vis[j] && low[j] > map[pos][j])
low[j] = map[pos][j];
}
return ret;
}
int main(void)
{
int t,n;
cin >> t;
while (t--)
{
cin >> n;
for(int i=1; i<=n; i++)
{
cin >> adapter[i];
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
cin >> map[i][j];
if (i != j)
map[i][j] += (adapter[i] + adapter[j]);
}
cout << prim(n) << endl;
}
return 0;
}