您的位置:首页 > 其它

ZOJ 1586

2016-01-25 21:33 225 查看
题目链接:[kuangbin带你飞]专题六 最小生成树 E - QS Network

//#include"stdafx.h"
#include <iostream>
#include <algorithm>
using namespace std;

struct edge{
int s, e, w;
};

edge e[200009];
int p[10009], cost[10009];

bool cmp(edge a, edge b){ return a.w < b.w; }
int find(int x){ return p[x] == x ? x : p[x] = find(p[x]); }

void kruscal(int n, int cnt)
{
int ans = 0;
int flag = 0;
for (int i = 0; i <= n; i++) p[i] = i;
sort(e, e + cnt, cmp);

for (int i = 0; i < cnt; i++)
{
int x = find(e[i].s);
int y = find(e[i].e);
if (x != y)
{
p[x] = y;
ans += e[i].w;
flag++;
}
if (flag  == n-1) break;
}
cout << ans << endl;
}

int main()
{
int m;
cin >> m;
while (m--)
{
int n, w, cnt  = 0;
cin >> n;
for (int i = 0; i < n; i++) cin >> cost[i];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
cin >> w;
if (i < j)
{
e[cnt].s = i, e[cnt].e = j, e[cnt++].w = w + cost[i] + cost[j];
}
}
kruscal(n, cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zoj