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

uestc WHITE ALBUM

时间:2015-02-17 07:03:58      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

思路:

只要连接到k个房间其中一个就可以,所以可以把k个房间并起来。

然后就是克鲁斯卡尔。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<string>
 6 #include<queue>
 7 #include<algorithm>
 8 #include<map>
 9 #include<iomanip>
10 #include<climits>
11 #include<string.h>
12 #include<cmath>
13 #include<stdlib.h>
14 #include<vector>
15 #define INF 1e7
16 #define MAXN 100010
17 #define maxn 1000010
18 #define Mod 1000007
19 #define N 1010
20 using namespace std;
21 typedef long long LL;
22 
23 struct node{
24     int a, b, c;
25     bool operator < (const node a) const{
26         return c < a.c;
27     }
28 }s[N*500];
29 
30 int fa[N];
31 int n, m, k;
32 
33 int findset(int x)
34 {
35     if (fa[x] == x) return x;
36     return fa[x] = findset(fa[x]);
37 }
38 
39 void merg(int a, int b)
40 {
41     int x = findset(a);
42     int y = findset(b);
43     if (x != y) {
44         fa[x] = y;
45     }
46 }
47 
48 void init()
49 {
50     for (int i = 0; i <= n; ++i)
51         fa[i] = i;
52 }
53 
54 int main()
55 {
56     while (cin >> n >> m >> k) {
57         init();
58         int tmp, x;
59         cin >> tmp;
60         for (int i = 1; i < k; ++i) {
61             cin >> x;
62             fa[x] = tmp;
63         }
64         int a, b, c;
65         for (int i = 0; i < m; ++i) {
66             cin >> s[i].a >> s[i].b >> s[i].c;
67         }
68         sort(s,s+m);
69         int res = 0;
70         for (int i = 0; i < m; ++i) {
71             int x = findset(s[i].a);
72             int y = findset(s[i].b);
73             if (x != y) {
74                 fa[x] = y;
75                 res += s[i].c;
76             }
77         }
78         cout << res << endl;
79     }
80     return 0;
81 }

 

uestc WHITE ALBUM

标签:

原文地址:http://www.cnblogs.com/usedrosee/p/4294784.html

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