对于这个hack数据:
3
1
1
1
0 9 9
9 0 9
9 9 0
输出:(正确)
3
代码:
#include<bits/stdc++.h>++
#define N 5005
#define p push_back
#define mk make_pair
using namespace std;
int n,m,z,f[N];
vector <pair <int,int> > e[N];
priority_queue <pair <int,int> ,vector <pair <int,int> > ,greater <pair <int,int> > > q;
int ans,tot = 1;
bool v[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n;
// int c = 1e10,ch = 0;
for(int i = 1;i <= n;i ++)
{
cin >> f[i];
// if(c > f[i])
// {
// c = f[i];
// ch = i;
// }
}
for(int i = 1;i <= n;i ++)
{
for(int j = 1;j <= n;j ++)
{
cin >> z;
if(!z)
{
z = f[i];
e[i].p(mk(z,0));
e[0].p(mk(z,i));
}
e[i].p(mk(z,j));
e[j].p(mk(z,i));
}
}
// v[ch] = 1;
// ans = c;
for(int i = 0;i < e[0].size();i ++)
q.push(e[0][i]);
while(tot <= n)
{
int a = q.top().second,u = q.top().first;
q.pop();
if(v[a] && a != 0) continue;
// cout <<a << endl;
v[a] = 1;
ans += u;
tot ++;
for(int i = 0;i < e[a].size();i ++)
q.push(e[a][i]);
}
cout << ans << endl;
return 0;
}