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

1863 畅通工程-并查集最小生成树

时间:2019-10-27 12:45:01      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:names   show   问题   ret   int   ble   const   span   algo   

题目链接

 

问题描述:

  技术图片

 

 

简单的最小生成树的题,将路径按cost从小到大排序,利用克鲁斯塔尔求最小生成树算法就行。

代码:

  

 1 #include<iostream>
 2 #include<queue>
 3 #include<algorithm>
 4 
 5 using namespace std;
 6 struct  Road
 7 {
 8     int beg;
 9     int end;
10     int cost;
11     Road(int beg, int end, int cost)
12     {
13         this->beg = beg;
14         this->end = end;
15         this->cost = cost;
16     }
17     bool operator <(const Road& b) const 
18     //必须要带const,使用STL,或者自己写compare函数
19     //优先级大的在队列的前面,所以重载的时候需要注意需要的形式
20     {
21         return (cost > b.cost);
22     }
23     
24 };
25 
26 int father[101];
27 int getfather(int a) //路径压缩
28 {
29     if(father[a] != a)
30     {
31             father[a] = getfather(father[a]);
32         return father[a];
33     }
34     else
35         return father[a];
36 }
37 
38 priority_queue<Road> q;
39 //并查集
40 
41 int num;
42 int vnum;
43 
44 int main()
45 {
46     cin>>num>>vnum;
47     int scost = 0;
48     int  ok = 0;
49     Road a = {0,0,0};
50     while(num)
51     {
52         scost = 0;
53         for(int i=0; i<=vnum; i++)
54         {
55             father[i] = i;
56         }
57         for(int i=0; i<num; i++)
58         {
59             cin>>a.beg>>a.end>>a.cost;
60             q.push(a);
61         }
62         while(!q.empty())
63         {
64             a = q.top();
65             q.pop();
66             if(getfather(a.beg) != getfather(a.end))
67             {
68                 father[a.end] = father[a.beg];
69                 scost += a.cost;
70                 ok++;
71             }
72         }
73         if(ok == vnum-1)
74             cout<<scost<<endl;
75         else
76             cout<<"?"<<endl;
77         ok = 0;
78         cin>>num>>vnum;
79 
80     }
81     return 0;
82 }

 

1863 畅通工程-并查集最小生成树

标签:names   show   问题   ret   int   ble   const   span   algo   

原文地址:https://www.cnblogs.com/Crossea/p/11746940.html

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