nyoj 布线问题 (最小生成树)

。。。注定只会做水题了。。

 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 #include<stack>
16 #include<set>
17 using namespace std;
18 #define INF 1000000007
19 #define MAXN 4010
20 #define Mod 1000007
21 #define N 100010
22 #define NN 30
23 #define sigma_size 3
24 const int MAX = 1000100;
25 const int maxn = 6e5 + 10;
26 using namespace std;
27 typedef long long LL;
28
29 int value[555];
30 int fa[555];
31 struct node{
32     int u, v, c;
33     bool operator <(const node a) const{
34         return c < a.c;
35     }
36 }a[255*500];
37
38
39 int T;
40 int n, m;
41 int ans;
42
43 int findset(int x)
44 {
45     if (fa[x] < 0) return x;
46     return fa[x] = findset(fa[x]);
47 }
48 int main()
49 {
50     cin >> T;
51     while (T--) {
52         ans = 0;
53         memset(a, 0, sizeof(a));
54         memset(value, 0, sizeof(value));
55         memset(fa,-1,sizeof(fa));
56         cin >> n >> m;
57         for (int i = 0; i < m; ++i) {
58             scanf("%d%d%d", &a[i].u, &a[i].v, &a[i].c);
59         }
60         for (int i = 1; i <= n; ++i)
61             scanf("%d",&value[i]);
62         sort(a, a + m);
63         sort(value + 1, value + n + 1);
64         for (int i = 0; i < m; ++i) {
65             int x = findset(a[i].u);
66             int y = findset(a[i].v);
67             if (x != y) {
68                 ans += a[i].c;
69                 fa[x] += fa[y];
70                 fa[y] = x;
71             }
72         }
73         printf("%d\n", ans+value[1]);
74     }
75     //system("pause");
76     return 0;
77 }
时间: 2024-11-02 22:37:21

nyoj 布线问题 (最小生成树)的相关文章

nyist oj 38 布线问题 (最小生成树 prim)

布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的楼都供上电. 2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n<5) 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v<=500) 随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100).(哪两栋楼间如果没有指明花费

nyoj 38 布线问题(最小生成树 kruskal算法)

题目38 题目信息 运行结果 本题排行 讨论区 布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的楼都供上电. 2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n<5) 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v<=500) 随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c

Nyoj 引水工程(最小生成树)

描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工程,事关中华民族长远发展.“南水北调工程”,旨在缓解中国华北和西北地区水资源短缺的国家战略性工程.就是把中国长江流域丰盈的水资源抽调一部分送到华北和西北地区.我国南涝北旱,南水北调工程通过跨流域的水资源合理配置,促进南北方经济.社会与人口.资源.环境的协调发展. 整个工程分东线.中线.西线三条调水线.东线工程位于东部,因地势低需抽水北送至华北地区.中线工程从汉水与其最大支流丹江交汇处

NYOJ 布线问题

布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的楼都供上电. 2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n<5) 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v<=500) 随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100).(哪两栋楼间如果没有指明花费

nyoj Jungle Roads (最小生成树)

Kruskal #include "iostream" #include "algorithm" using namespace std; #define MAXN 1111 struct node { int x, y, l; }p[MAXN]; int fa[MAXN]; int n, m, k; int re, num; bool cmp(node a, node b) { return a.l < b.l; } int findset(int x) {

nyoj 38 布线问题【最小生成树 Kruskal】

布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的楼都供上电. 2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n<5) 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v<=500) 随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100).(哪两栋楼间如果没有指明花费

NYOJ 38 布线问题

布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有的楼都供上电.2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n<5)每组测试数据的第一行是两个整数v,e.v表示学校里楼的总个数(v<=500)随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100).(哪两栋楼间如果没有指明花费,则表示这

最小生成树 之 CODE[VS] 1231 最优布线问题

/* 最小生成树 之 CODE[VS] 1231 最优布线问题 Kruskal算法(邻接表) */ 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstddef> 5 #include <iterator> 6 #include <algorithm> 7 #include <string> 8 #include <

南阳OJ-38 布线问题(最小生成树应用_prim)

布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有的楼都供上电.2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n<5)每组测试数据的第一行是两个整数v,e.v表示学校里楼的总个数(v<=500)随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100).(哪两栋楼间如果没有指明花费,则表示这