码迷,mamicode.com
首页 > Web开发 > 详细

【转】POJ-1258-Agri-Net:简单 Kruskal 最小生成树第一题

时间:2015-08-06 09:25:35      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node
{
        int s, e, w;
        node(int ss, int ee, int ww):s(ss),e(ee),w(ww){}
        bool operator < (const node & n) const {
                return w<n.w;
        }
};
vector<node>edges;
vector<int>parent;

int GetRot(int a)
{
        if(a!=parent[a])
            parent[a]=GetRot(parent[a]);
        return parent[a];
}

void Union(int a, int b)
{
        a = GetRot(a);
        b = GetRot(b);
        if(a==b)
            return ;
        parent[a]=b;
}

int main()
{
        int N;
        while(cin>>N)
        {
                edges.clear();      parent.clear();
                for(int i=0; i<N; i++)
                    parent.push_back(i);
                for(int i=0; i<N; i++)
                    for(int j=0; j<N; j++)
                {
                        int w;  cin>>w;
                        edges.push_back(node(i,j,w));
                }
                sort(edges.begin(), edges.end());
                int done = 0;      int ans=0;
                for(int i=0; i<edges.size(); i++){
                    if( GetRot(edges[i].s)!=GetRot(edges[i].e) )
                    {
                            Union(edges[i].s,edges[i].e);
                            ans+=edges[i].w;
                            done++;
                    }
                    if(done==N-1) break;
                }
                cout<<ans<<endl;
        }
        return 0;
}

 

【转】POJ-1258-Agri-Net:简单 Kruskal 最小生成树第一题

标签:

原文地址:http://www.cnblogs.com/FightForCMU/p/4707006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!