题目链接:http://codeforces.com/contest/1095/problem/F


题意:给你n个点,每个点有个权值,如果在两点之间添一条边,代价为两点权值之和。现在给出m个边可以选择,代价给出,你可以自己建边不选择。问你把这个图连通最小的花费为多少。

解题心得:

  很简单的一个题,刚开始想复杂了弄了好久。直接选一个权值最小的点出来,和每一个点之间连一条边,和m条边放在一起,kruskal跑一下就行了。


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+; int father[maxn], n, m, pos;
ll Min; ll node[maxn];
struct Edge {
int s, t;
ll va; Edge(int S, int T, ll Va):
s(S), t(T), va(Va){};
}; bool cmp(Edge a, Edge b) {
return a.va < b.va;
} vector <int> ve[maxn];
vector <Edge> edge; void init() {
Min = 1e18;
scanf("%d%d",&n, &m);
for(int i=;i<=n;i++) {
ve[i].push_back(i);
scanf("%lld", &node[i]);
if(node[i] < Min) {
Min = node[i], pos = i;
}
father[i] = i;
}
for(int i=;i<m;i++) {
int a,b;
ll va;
scanf("%d%d%lld", &a, &b, &va);
edge.push_back(Edge(a, b, va));
}
for(int i=;i<=n;i++) {
if(i == pos) continue;
edge.push_back(Edge(pos, i, node[i] + Min));
}
sort(edge.begin(), edge.end(), cmp);
} int find(int x){
if(father[x] == x)
return x;
return father[x] = find(father[x]);
} void merge(int x,int y) {
int fx = find(x);
int fy = find(y);
father[fy] = fx;
} int main() {
//freopen("1.in", "r", stdin);
//freopen("1.out", "w", stdout);
init();
ll ans = ;
for(int i=;i<edge.size();i++) {
int fx = find(edge[i].s);
int fy = find(edge[i].t);
if(fx != fy) {
ans += edge[i].va;
merge(fx, fy);
}
}
printf("%lld", ans);
return ;
}

F. Make It Connected的更多相关文章

  1. F. Make It Connected 解析(思維、MST)

    Codeforce 1095 F. Make It Connected 解析(思維.MST) 今天我們來看看CF1095F 題目連結 題目 給你\(n\)個點,每個點\(u\)還有一個值\(a[u]\ ...

  2. F. Make It Connected(krustra+)

    题目链接:http://codeforces.com/contest/1095/problem/F 题目大意:首先给你n个点,然后给你每个点的权值,再给你m条边,这些边可以选也可以不选,然后问你要使这 ...

  3. F - Number of Connected Components UVALive - 7638 (并查集 + 思维)

    题目链接:https://cn.vjudge.net/contest/275589#problem/F 题目大意:就是给你n个数,如果说两个数之间的gcd!=1,那么就将这两个点连起来,问你最终这些点 ...

  4. Codeforces Round #529 (Div. 3) F.Make It Connected

    传送门 题意: 有 n 个顶点,每个顶点有个花费 a[ i ],连接顶点 u,v 需要花费 a[v]+a[u]的代价. 有 m 个特殊边,每条边有三个参数 u,v,w 代表的意思是连接 u,v 的花费 ...

  5. Codeforces Round #529 (Div. 3) F. Make It Connected (贪心,最小生成树)

    题意:给你\(n\)个点,每个点都有权值,现在要在这\(n\)个点中连一颗最小树,每两个点连一条边的边权为两个点的点权,现在还另外给了你几条边和边权,求最小权重. 题解:对于刚开始所给的\(n\)个点 ...

  6. [No000077]打造自己的Eclipse

    下载官网的Eclipse IDE for Java EE Developers 在根目录下的eclipse.ini文件中添加"-Dfile.encoding=UTF-8", 作用: ...

  7. Cognition math based on Factor Space (2016.05)

    Cognition math based on Factor Space Wang P Z1, Ouyang H2, Zhong Y X3, He H C4 1Intelligence Enginee ...

  8. 5.非关系数据库(Nosql)它mongodb:创建一个集合,导出和导入备份, 数据恢复,进出口

     1 固定集合 固定集合值得是事先创建并且大小固定的集合 2 固定集合的特征:固定集合非常像环形队列.假设空间不足,最早文档就会被删除,为新的文档腾出空间.一般来说.固定集合适用于不论什么想要自己 ...

  9. CodeForces Round #529 Div.3

    http://codeforces.com/contest/1095 A. Repeating Cipher #include <bits/stdc++.h> using namespac ...

随机推荐

  1. Redis添加访问密码

    进入Redis的安装目录,找到redis.conf文件. 1.修改密码:使用vi命令打开redis.conf文件,先使用字符匹配查找到requirepass foobared对应的位置, 然后修改fo ...

  2. Lovable eccentric

    It took him four years to stage this elaborate joke simply to prove that critics do not always know ...

  3. SAP专家培训之Netweaver ABAP内存管理和内存调优最佳实践

    培训者:SAP成都研究院开发人员Jerry Wang 1. Understanding Memory Objects in ABAP Note1: DATA itab WITH HEADER LINE ...

  4. 字符串拼接+和concat的区别

    +和concat都可以用来拼接字符串,但在使用上有什么区别呢,先来看看这个例子. public static void main(String[] args) { // example1 String ...

  5. django.db中的transaction

    transaction.set_autocommit(0) ..... ........ ................ transaction.commit() 可以使夹在其两句中间的所有SQL语 ...

  6. sysctl.conf学习和调优

    转载于简书:sysctl.conf学习和调优 ,如有版本问题,请联系我 前言 记得第一次接触/etc/security/limits.conf和/etc/sysctl.conf时是因为部署Oracle ...

  7. 理解JavaScript闭包(closure)

    闭包听了很多次了,可是到底有那些具体的用法还是不清楚,看了<JavaScript高级程序设计>,有点明白了. 1.闭包的定义: 闭包其实就是一个函数,而这个函数有点特别,它能够访问另一个函 ...

  8. git终端操作

    1.提交 git add . git commit -m "test" git push origini master 2.分支 创建feature_x分支,并切换到feature ...

  9. [转]数据绑定之DataFormatString

    设定BoundField的DataFormatString,通常有以下几种 DataFormatString= "{0:C}" 货币,货币的格式取决于当前Thread中Cultur ...

  10. 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)

    洛谷P2023:https://www.luogu.org/problemnew/show/P2023 思路 需要2个Lazy-Tag 一个表示加的 一个表示乘的 需要先计算乘法 再计算加法 来自你谷 ...