Codeforces 1095F Make It Connected 【MST】
<题目链接>
题目大意:
给定一张$n$个顶点(每个顶点有点权)的无向图,并且给出边权为$w_i$的m条边,顶点$u$和顶点$v$直接如果建边,边权为$a_u + a_v$,求图连通的最小边权和。
解题分析:
可以发现,如果仅仅只是考虑根据点权连边的话,那么最优的情况就是所有点(除点权最小的点)与点权最小的点相连。如果加上题目给出的边权综合考虑,我们就是将这m+n-1条边加入考虑的范围内,然后根据这些边建一颗最小生成树。
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
#define N int(2e5+7)
#define rep(i,s,t) for(int i=s;i<=t;i++)
int n,m,pre[N];
ll val[N]; struct Edge{
int fi,se;
ll cost;
Edge(int _fi=,int _se=,ll _cost=):fi(_fi),se(_se),cost(_cost){}
bool operator<(const Edge & tmp)const {
return cost<tmp.cost;
}
}edge[N<<]; //最多只用考虑m+n-1条边 vector<Edge>vec; int find(int x){ return pre[x]==x?x:pre[x]=find(pre[x]); } void Kruskal(){
ll sum=,cnt=;
sort(vec.begin(),vec.end());
for(int i=;i<vec.size();i++){
Edge now=vec[i];
int f1=find(now.fi),f2=find(now.se);
if(f1!=f2){
pre[f1]=f2;
sum+=now.cost;
cnt++;
}
if(cnt>=n-)break;
}
printf("%lld\n",sum);
} int main(){
scanf("%d%d",&n,&m);
ll mn=1e18;int mnloc=-;
rep(i,,n){
scanf("%lld",&val[i]);
pre[i]=i;
if(val[i]<mn)mn=val[i],mnloc=i; //记录最小的节点序号和权值
}
rep(i,,m){
int u,v;ll w;scanf("%d%d%lld",&u,&v,&w);
vec.push_back(Edge(u,v,w)); //真实的边权
}
rep(i,,n){
if(i==mnloc)continue;
vec.push_back(Edge(i,mnloc,val[i]+mn)); //点间连边的点权之和
}
Kruskal();
}
2019-02-21
Codeforces 1095F Make It Connected 【MST】的更多相关文章
- [CodeForces - 1225E]Rock Is Push 【dp】【前缀和】
[CodeForces - 1225E]Rock Is Push [dp][前缀和] 标签:题解 codeforces题解 dp 前缀和 题目描述 Time limit 2000 ms Memory ...
- Codeforces 716B Complete the Word【模拟】 (Codeforces Round #372 (Div. 2))
B. Complete the Word time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- POJ2485 Highways 【MST】
Highways Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22842 Accepted: 10525 Descri ...
- Codeforces Round #382 Div. 2【数论】
C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...
- Codeforces Beta Round #62 题解【ABCD】
Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...
- Codeforces 839A Arya and Bran【暴力】
A. Arya and Bran time limit per test:1 second memory limit per test:256 megabytes input:standard inp ...
- Codeforces 1095F Make It Connected(最小生成树)
题目链接:Make It Connected 题意:给定一张$n$个顶点(每个顶点有权值$a_i$)的无向图,和已连接的拥有边权$w_i$的$m$条边,顶点u和顶点v直接如果新建边,边权为$a_u+a ...
- 【MST】P2323 [HNOI2006]公路修建问题
Description 给定 \(n\) 个点 \(m - 1\) 条无向边,每条边有两种边权,贵一点的和便宜一点的.要求至少选择 \(k\) 条贵边使得图联通且花费最大的边权值最小. Input 第 ...
- CodeForces - 580C Kefa and Park 【BFS】
题目链接 http://codeforces.com/problemset/problem/580/C 题意 根节点是 1 然后所有的叶子结点都是饭店 从根节点到叶子结点的路径上 如果存在 大于m 个 ...
随机推荐
- 弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
自从 2011 年发布以来,Kotlin 凭借强大的功能在开发者中的欢迎程度与日俱增.且在一年前,Google 宣布 Kotlin 正式成为 Android 官方开发语言,由此引发了从 Java 迁移 ...
- windows Sever 2012下Oracle 12c安装配置方法图文教程
windows Sever 2012下Oracle 12c安装配置方法图文教程 Oracle 12c安装配置方法图文教程,具体内容如下 1.我们开启虚拟机 2.Windows Sever 2012启动 ...
- 新建maven项目错误处理
1.如果新建maven 项目确省maven dependencies,则在存在问题工程的.classpath末尾 加上 <classpathentry kind="con" ...
- verilog-testbench 时钟和复位模板
/********************************************* ** Clocks & Reset ******************************* ...
- PYMySQL的注册功能的实现
import pymysql conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root& ...
- 【kafka】生产者速度测试
非常有用的参考博客:http://blog.csdn.net/qq_33160722/article/details/52903380 pykafka文档:http://pykafka.readthe ...
- Android手机流量分析工具介绍
一.20 Best Android Hacking Apps And Tools Of 2018 首先罗列常见的Android手机hacking的工具 #1The Android Network Ha ...
- CF939F
好神奇的dp... 首先有一个很简单的思想:设dp[i][j]表示目前到了第i分钟,朝上的面被烤了j分钟的情况下所需的最小交换次数 那么有转移:dp[i][j]=min(dp[i-1][j],dp[i ...
- Vue 导入文件import、路径@和.的区别
***import: html文件中,通过script标签引入js文件.而vue中,通过import xxx from xxx路径的方式导入文件,不光可以导入js文件. from前的:“xxx”指的是 ...
- python进行进制转换
# 10进制转为2进制 print(bin(10)) # 结果:0b1010 # 2进制转为10进制 print(int("1001", 2)) # 结果:9 # 10进制转为16 ...