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

题目大意:首先给你n个点,然后给你每个点的权值,再给你m条边,这些边可以选也可以不选,然后问你要使这个加边构成的图联通的最小花费。

具体思路:我们可以先找出权值最小的点,然后别的点都向向这个点连一条边,这是当前使得图联通的最小构图的方法,然后再看一下题目给定的点加上,注意题目给定的权值不一定是最小的。(如果是用spfa算法的话,就需要建立双向边,然后用krustra的话,没有建立双向边的必要,建立起来就可以了)

AC代码:

 #include <iostream>
#include<stdio.h>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
# define ll long long
# define LL_inf 1ll<<
const int maxn =4e5+;
struct node
{
int fr;
int to;
ll cost;
} q[maxn];
ll a[maxn];
int father[maxn],num;
int Find(int t)
{
return t==father[t]?t:father[t]=Find(father[t]);
}
bool cmp(node t1,node t2)
{
return t1.cost<t2.cost;
}
ll krustra()
{
ll sum=;
for(int i=; i<=num; i++)
{
int t1=Find(q[i].fr);
int t2=Find(q[i].to);
if(t1!=t2)
{
father[t1]=t2;
sum+=q[i].cost;
}
}
return sum;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
ll minn=LL_inf;
int id=;
for(int i=; i<=n; i++)
{
father[i]=i;
scanf("%lld",&a[i]);
if(a[i]<minn)
{
minn=a[i];
id=i;
}
}
int st,ed;
ll co;
for(int i=; i<=m; i++)
{
scanf("%d %d %lld",&st,&ed,&co);
co=min(a[st]+a[ed],co);
q[++num].fr=st;
q[num].to=ed;
q[num].cost=co;
}
for(int i=; i<=n; i++)
{
if(i==id)
continue;
q[++num].fr=i;
q[num].to=id;
q[num].cost=a[i]+a[id];
}
sort(q+,q+num+,cmp);
ll ans=krustra();
printf("%lld\n",ans);
return ;
}

F. Make It Connected(krustra+)的更多相关文章

  1. HDU 4635:Strongly connected(强连通)

    http://acm.hdu.edu.cn/showproblem.php?pid=4635 题意:给出n个点和m条边,问最多能添加几条边使得图不是一个强连通图.如果一开始强连通就-1.思路:把图分成 ...

  2. F——宋飞正传(HDU3351)

    题目:   I’m out of stories. For years I’ve been writing stories, some rather silly, just to make simpl ...

  3. HDU 4635 - Strongly connected(2013MUTC4-1004)(强连通分量)

    t这道题在我们队属于我的范畴,最终因为最后一个环节想错了,也没搞出来 题解是这么说的: 最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数尽可能的多,则X部肯 ...

  4. Codeforces 1095F Make It Connected(最小生成树)

    题目链接:Make It Connected 题意:给定一张$n$个顶点(每个顶点有权值$a_i$)的无向图,和已连接的拥有边权$w_i$的$m$条边,顶点u和顶点v直接如果新建边,边权为$a_u+a ...

  5. F - Friends ZOJ - 3710(暴力)

    题目链接:https://cn.vjudge.net/contest/280949#problem/F 题目大意:给你n个人,然后给你m个关系,每个关系输入t1, t2 .代表t1和t2是朋友关系(双 ...

  6. Atcoder Grand Contest 034 F - RNG and XOR(FWT)

    Atcoder 题面传送门 & 洛谷题面传送门 tsc 考试前 A 的题了,结果到现在才写这篇题解--为了 2mol 我已经一周没碰键盘了,现在 2mol 结束算是可以短暂的春天 短暂地卷一会 ...

  7. hdu 4635 Strongly connected (tarjan)

    题意:给一个n个顶点m条弧的简单有向图(无环无重边),求最多能够加入多少条弧使得加入后的有向图仍为简单有向图且不是一个强连通图.假设给的简单有向图本来就是强连通图,那么输出-1. 分析: 1.用tar ...

  8. 判断最小生成树是否为一(krustra)

    题目链接:https://vjudge.net/contest/66965#problem/K 具体思路: 首先跑一遍最短路算法,然后将使用到的边标记一下,同时使用一个数组记录每一个权值出现的次数,如 ...

  9. 【CF1095F】 Make It Connected(最小生成树)

    题目链接 如果没有特殊边的话显然答案就是权值最小的点向其他所有点连边. 所以把特殊边和权值最小的点向其他点连的边丢一起跑最小生成树就行了. #include <cstdio> #inclu ...

随机推荐

  1. Android 开发工具下载中文网站

    Android官方网站(develop.android.com)因为被墙而无法访问.这时可以访问中文网址: http://wear.techbrood.com/ SDK Manager 代理及安装文件 ...

  2. PHP开发网站,你是如何提高其网站的安全性的?

    一.网站程序问题 很多网站的安全问题大多是由于网站程序存在漏洞,所以想要提高网站安全性,必须要选择安全的后台cms系统,若有能力可以自己去开发网站后台,这样安全性能得到极大的提高,若是从网上选择一些免 ...

  3. keydown和KeyPress事件有何不同

    KEYPRESSWhen a windowed control receives a key-press message (WM_CHAR) from Windows, its message han ...

  4. .net mvc nopi生成word

    参考下面地址,实例已很不错了 https://www.cnblogs.com/ZaraNet/p/9691908.html

  5. rabbitmq .erlang.cookie文件疑惑

    1.安装方式常见的rabbitmq安装方式有两种:rpm安装和二进制安装(编译安装). 2..erlang.cookie是什么.erlang.cookie是erlang实现分布式的必要文件,erlan ...

  6. AptanaStudio3+PHP程序远程调试的方法和步骤

    php是执行在服务器上的脚本程序,通常调试bug,直接在浏览器页面就可以打印出错误信息,凭此基本能解决所有bug,但是有时候,可以说大多数时候,php会直接处理客户端的请求,作为数据接口传递数据,没有 ...

  7. NOIP2018前的一些计划&记录(日更)

    先空着,等停课了再开始写. 诸位好,我是yyb.现在显然已经不再是高一的小蒟蒻了,已经升级为了高二的菜鸡了 现在已经不能再每天划划水切切题了,毕竟......已经高二了,所有的机会从高一的两倍全部除了 ...

  8. BZOJ 3190 赛车 | 计算几何

    BZOJ 3190 赛车 题面 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位置.比赛开始后,车辆gi将会以 ...

  9. 【CF835D】Palindromic characteristics 加强版 解题报告

    [CF835D]Palindromic characteristics 加强版 Description 给你一个串,让你求出\(k\)阶回文子串有多少个.\(k\)从\(1\)到\(n\). \(k\ ...

  10. Metasploit+python生成免杀exe过360杀毒

    Metasploit+python生成免杀exe过360杀毒 1在kali下生成一个反弹的msf的python脚本,命令如下: msfvenom -p windows/meterpreter/reve ...