51nod--1212 无向图最小生成树

Posted i am back

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod--1212 无向图最小生成树相关的知识,希望对你有一定的参考价值。

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 
 
N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树。
 
Input
第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量。(2 <= N <= 1000, 1 <= M <= 50000)
第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值。(1 <= S, E <= N,1 <= W <= 10000)
Output
输出最小生成树的所有边的权值之和。
Input示例
9 14
1 2 4
2 3 8
3 4 7
4 5 9
5 6 10
6 7 2
7 8 1
8 9 7
2 8 11
3 9 2
7 9 6
3 6 4
4 6 14
1 8 8
Output示例
37

就是最简单的求最小生成树,用并查集
/*
    data:2018.05.10
    author:gsw
    link:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1212
    account:[email protected]

*/
#define ll long long
#define IO ios::sync_with_stdio(false);

#include<iostream>
#include<algorithm>
#include<math.h>
#include<stdio.h>
#include<string.h>
using namespace std;

class Edge
{
public:
    int a,b,c;
};
Edge edge[50005];
int pre[1005];int n,m;

bool camp(Edge aa,Edge bb)
{
    return aa.c<bb.c;
}
int Find(int x)
{
    int r=x;
    while(r!=pre[r])
        r=pre[r];
    int i=x,j;
    while(pre[i]!=r)
    {
        j=pre[i];
        pre[i]=r;
        i=j;
    }
    return r;
}
void init()
{
    memset(edge,0,sizeof(edge));
    for(int i=1;i<=n;i++)
        pre[i]=i;
}
int mix(int x,int y)
{
    //cout<<x<<" y="<<y<<endl;
    int fx=Find(x),fy=Find(y);
    //cout<<fx<<" fy="<<fy<<endl;
    if(fx!=fy)
    {
        pre[fy]=fx;
        return 1;
    }
    return 0;
}
ll kusal()
{
    sort(edge,edge+m,camp);
    ll ans=0;int js=0;
    for(int i=0;i<m;i++)
    {

        if(mix(edge[i].a,edge[i].b))
        {
            //cout<<"ans="<<ans<<endl;
            ans+=edge[i].c;
            js++;
        }
        if(js==(n-1))break;
    }
    return ans;
}
int main()
{

    scanf("%d%d",&n,&m);
    init();
    int a,b,c;
    for(int i=0;i<m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        edge[i].a=a;edge[i].b=b;edge[i].c=c;
    }
    cout<<kusal()<<endl;
    return 0;
}

 

以上是关于51nod--1212 无向图最小生成树的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1212 无向图最小生成树

51Nod 1212 无向图最小生成树

51Nod 1212无向图最小生成树

(图论)51NOD 1212 无向图最小生成树

图--04---加权无向图最小生成树

2023-04-07 无向有权图之最小生成树问题