• uestc WHITE ALBUM


    思路:

    只要连接到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 }
  • 相关阅读:
    Linux常用命令(二)
    C#异步调用
    Ajax运用总结
    SQL Server2005 FOR XML PATH 语句的应用
    SQL Server 2005 处理交叉表
    如何控制并发和控制死锁(内含pb的处理要点)
    WPF 中的换行符
    C#委托的异步调用
    pivot 附近有语法错误,您可能需要将当前数据库的兼容级别设置为更高的值。
    应用系统BUG分布小结
  • 原文地址:https://www.cnblogs.com/usedrosee/p/4294784.html
Copyright © 2020-2023  润新知