I - Networking(2017-01-18)

题目大意
这是一道加权并查集的题,题目意思没什么好说的,直接看样例;
样例第一行输入两个数字 n ,m,接下来m行是两点连成的边的权值;
题目要求将1到n的数字联通,并输出最短路径的长度;

思路
开一个结构体数组输入边的信息,并根据边的权值大小从小到大进行排序;
然后依次联通两点,累加边的权值,直到所有点都联通,累加值即为最短路径的长度,输出即可;


#include
#include
using namespace std;

int n,m;
int pre[10005];

struct edge
{
    int x,y,cost;
}p[55000];

int find(int x)
{
    while(x!=pre[x])
    {
        x=pre[x];
    }
    return x;
}

int mix(int x,int y)
{
    int fx=find(x),fy=find(y);
    if(fx!=fy)
    {
        pre[fx]=fy;
    }
}

bool cmp(edge e1,edge e2)
{
    return e1.cost

你可能感兴趣的:(I - Networking(2017-01-18))