码迷,mamicode.com
首页 > 其他好文 > 详细

并查集+Priority_Queu+Kruskal实现最小生成树

时间:2014-09-05 15:58:31      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   for   div   sp   log   

#include<stdio.h>
#include<queue>
using namespace std;
#define MAX 99999
int father[MAX];

struct Edge
{
  int a;
  int b;
  int dist;
  bool operator<(const Edge & e) const
  {
       if(dist>e.dist)
         return true;
    return false;
  }
}edge[MAX];

void init(int n)
{
  for(int i=1;i<=n;i++)
  {
     father[i]=i;
  }
}

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

void merge(int a,int b)
{
    int i=find(a);
    int j=find(b);
    if(i!=j)
    {
       father[i]=j;
    }
}

int main()
{
    int n,m;
    int a,b,d;
    Edge tmp;
    priority_queue<Edge> q;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
       init(n);
       for(int i=0;i<m;i++)
       {
          scanf("%d%d%d",&tmp.a,&tmp.b,&tmp.dist);
          q.push(tmp);
       }
       int sum=0;
       while(!q.empty())
       {
          tmp = q.top();
          //printf("11%d %d %d\n",tmp.a,tmp.b,tmp.dist);
          int a=find(tmp.a);
          int b=find(tmp.b);
          if(a!=b)
          {
             merge(a,b);
             printf("%d %d\n",tmp.a,tmp.b);
             sum+=tmp.dist;
          }
          q.pop();
       }
       printf("%d\n",sum);
    }
    getchar();
    return 0;
} 

 

并查集+Priority_Queu+Kruskal实现最小生成树

标签:style   blog   color   io   ar   for   div   sp   log   

原文地址:http://www.cnblogs.com/championlai/p/3958180.html

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