Codeforces Round #535 F-MST Unification
题目大意:
给定n m 为图中的点数n和边数m
给定m条边的信息 u v w 为u点到v点有一条长度为w的边
图中无环无重边
这个图的MST的花费为k 但可能存在多种花费为k的MST的方案
此时对图中的边进行操作 可增大权重或翻倍增大权重
要求只保留图中的一种花费为k的MST方案时 需要对最少多少条边进行操作
1.原本的kruskal 会选出构成MST的最短的n-1条边
即在n=5边长度为 1 2 2 3 4 4 5 6 的图中
原本会选出4条 1 2 3 4 (能构成1种MST的方案)
2.这个方法会记录到最短的n-1条边和与这些边长度相等的边
现在会选出6条 1 2 2 3 4 4 (能构成多种MST方案)
3.此时只保留一种MST方案的话需4条(n-1条)边
则需要对多出的6-4=2条边进行操作
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=2e5+;
int n, m;
struct EDGE {
int u,v,w;
bool operator <(const EDGE& p)const {
return w<p.w;
}
}e[N];
int fa[N];
int getfa(int u) {
if(fa[u]==u) return u;
else return fa[u]=getfa(fa[u]);
}
int main()
{
while(~scanf("%d%d",&n,&m)) {
for(int i=;i<m;i++)
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
sort(e,e+m);
for(int i=;i<=n;i++) fa[i]=i;
int ans=, L=;
for(int i=;i<m;i++) {
int u=getfa(e[i].u), v=getfa(e[i].v);
if(u!=v) ans++; if(i+<m and e[i+].w!=e[i].w) {
for(int j=L;j<=i;j++) {
u=getfa(e[j].u), v=getfa(e[j].v);
if(u!=v) fa[u]=v;
}
L=i+;
}
}
printf("%d\n",ans-(n-));
/// 去掉唯一的的MST所需的n-1条边
} return ;
}
Codeforces Round #535 F-MST Unification的更多相关文章
- Codeforces Round #535 (Div. 3) F
F. MST Unification 题目传送门 题意: 给你n个顶点,m条边:保证没有重边,其中存在多个MST(最小生成树), 你可以修改一些边的权值,让其中有且仅有一个最小生成树,求最少操作的边数 ...
- Codeforces Round #535 (Div. 3) 题解
Codeforces Round #535 (Div. 3) 题目总链接:https://codeforces.com/contest/1108 太懒了啊~好久之前的我现在才更新,赶紧补上吧,不能漏掉 ...
- Codeforces Round #535 (Div. 3) [codeforces div3 难度测评]
hhhh感觉我真的太久没有接触过OI了 大约是前天听到JK他们约着一起刷codeforces,假期里觉得有些颓废的我忽然也心血来潮来看看题目 今天看codeforces才知道居然有div3了,感觉应该 ...
- Educational Codeforces Round 40 F. Runner's Problem
Educational Codeforces Round 40 F. Runner's Problem 题意: 给一个$ 3 * m \(的矩阵,问从\)(2,1)$ 出发 走到 \((2,m)\) ...
- Codeforces Round #535(div 3) 简要题解
Problem A. Two distinct points [题解] 显然 , 当l1不等于r2时 , (l1 , r2)是一组解 否则 , (l1 , l2)是一组合法的解 时间复杂度 : O(1 ...
- Codeforces Round #535 E2-Array and Segments (Hard version)
Codeforces Round #535 E2-Array and Segments (Hard version) 题意: 给你一个数列和一些区间,让你选择一些区间(选择的区间中的数都减一), 求最 ...
- Codeforces Round #535 (Div. 3) 解题报告
CF1108A. Two distinct points 做法:模拟 如果两者左端点重合就第二条的左端点++就好,然后输出左端点 #include <bits/stdc++.h> usin ...
- Educational Codeforces Round 61 F 思维 + 区间dp
https://codeforces.com/contest/1132/problem/F 思维 + 区间dp 题意 给一个长度为n的字符串(<=500),每次选择消去字符,连续相同的字符可以同 ...
- Educational Codeforces Round 51 F. The Shortest Statement(lca+最短路)
https://codeforces.com/contest/1051/problem/F 题意 给一个带权联通无向图,n个点,m条边,q个询问,询问两点之间的最短路 其中 m-n<=20,1& ...
随机推荐
- Rust <7>:数据结构==>链表
enum List { Cons(u64, Box<List>), NULL, } impl List { fn new() -> List { List::NULL } fn pr ...
- Python常用模块系列
1.时间模块 import time,datetime # print(time.time()) #时间戳 # print(time.strftime("%Y-%m-%d %X") ...
- 数据可视化----matplotlib.pylot
一.输入具体数 plt.plot([3,1,4,5,2]) #自动生成y轴 plt.ylabel("Grade") #y轴的标签 plt.savefig('test1',dpi=6 ...
- editplus 正则表达式 分组替换
editplus :zz正则表达式替换 /开头的api+换行符 替换为 /开头的api+空格 \1后有空格 editplus :zz正则表达式替换 行首两个数字+换行符 替换为 行首两个数字+空 ...
- MySQL数据库安装与启动(Linux)
1.用yum安装 用root权限打开命令行界面,执行以下yum指令: yum安装MySQL yum install mysql mysql-server mysql-devel -y 在最终提示Com ...
- tomcat部署项目后,项目没有成功部署到tomcat里面,或者部署的是之前项目
用svn下载java项目到本地,导入eclipse里面,然后部署到tomcat里,启动tomcat,一闪而过,在浏览器中打开,报404错(找不到页面),其实是项目没有成功部署到tomcat,可以打开t ...
- Java中super关键字的位置
1.子类的构造函数如果要引用super的话,必须把super放在函数的首行. 例如: class Base { Base() { System.out.println("Base&qu ...
- 【最新】docker 安装elasticsearch + kibana步骤【第二篇_kibana】
本文主要讲解Docker 安装 kibana并设置中文语言 [如果有需要安装elasticsearch 的朋友请移步博主第一篇文章] 话不多说! 第一步:docker 下载kibana docker ...
- JSONObject.toJSONString(map)
Map<Integer, List<Integer>> map = new LinkedHashMap<>(); map.put(1,ddzCard.getOneS ...
- cboard进行访问,汉化