题目链接: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. January 25 2017 Week 4 Wednesday

    In every triumph, there's a lot of try. 每个胜利背后都有许多尝试. There's a lot of try behind every success, and ...

  2. 如何跟踪比特币SV(BSV)地址余额?

    Coin Balance Tracker 能够查看任何BSV/BCH/BTC地址的当前余额.您只需要确保你的电脑能连接Internet以及地址正确.此程序非常安全,因为它只使用公共数据,不需要登录和密 ...

  3. C#图解教程读书笔记(第3章 类型、存储及变量)

    1.C#的中的数值不具有bool特性. 2.dynamic在使用动态语言编写的程序集时使用,这个不太明白,看到后面需要补充!! 动态化的静态类型 3.对于引用类型,引用是存放在栈中,而数据是存放在堆里 ...

  4. 误用MySQL关键字导致的错误

    使用Hibernate整合Spring的过程中,我使用explain作为表的字段,结果一直给我报错. 报错如下: ERROR: You have an error in your SQL syntax ...

  5. 当当网-前端project师測试题

                                     前端project师測试题(笔试时间20分钟.面试时间20分钟)   一.笔试 1.基础问题 (1)前端页面有哪三层构成,各自是什么? ...

  6. springboot+mybatis+shiro——登录认证和权限控制

    转载:https://z77z.oschina.io/ 一.引入依赖 shiro-all包含shiro所有的包.shiro-core是核心包.shiro-web是与web整合.shiro-spring ...

  7. C#一键显示及杀死占用端口号进程

    private void t_btn_kill_Click(object sender, EventArgs e) { int port; bool b = int.TryParse(t_txt_gu ...

  8. java序列化报错

    Main.javat mainsr &java.util.Collections$UnmodifiableList�%1�� L listq ~xr ,java.util.Collection ...

  9. CRegKey 注册表操作 转

    转自 http://blog.csdn.net/pbymw8iwm/article/details/6931946 1.简介 CRegKey提供了对系统注册表的操作方法,通过CRegKey类,可以方便 ...

  10. 使用Storyboard拖线容易出错的地方

    使用Storyboard拖线容易出错的地方: 在Storyboard中,选中某个控件,按住ctrl键进行拖线,建立Outlet和Action后,不能手动再去修改自动生成的代码,然后再次进行连线,这样会 ...