POJ 1287 Networking

来源:互联网 发布:java初级程序员简历 编辑:程序博客网 时间:2024/05/16 17:33

原题链接:[kuangbin带你飞]专题六 最小生成树 B - Networking

最小生成树问题。

Input: m, n 图的两个顶点和权值
Output: 最短权值之和

//#include"stdafx.h"#include <iostream>#include <cstdio>#include <algorithm>using namespace std;struct edge{    int s, e, w;};edge e[100008];int p[100000];int m, n;bool cmp(edge a, edge b) { return a.w < b.w; }int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); }void kruscal(){    int ans = 0;    sort(e, e + n, cmp);    for (int i = 0; i < n; i++)    {        int x = find(e[i].s);        int y = find(e[i].e);        if (x != y)        {            p[x] = y;            ans += e[i].w;        }    }    cout << ans << endl;}int main(){    while (1)    {        cin >> m>>n;        if (0 == m) break;        for (int i = 0; i < n; i++) p[i] = i;        int s, end, w;        for (int i = 0; i < n; i++)        {            cin >> s >> end >> w;            e[i].s = s-1, e[i].e = end - 1, e[i].w = w;        }        kruscal();    }    return 0;}
0 0
原创粉丝点击