cf1242B
题意简述:给出一个n个点的完全图,边权要么是1要么是0,输入只给出权值的是1的那些边,求解最小生成树的权值
解答:边很多,我们考虑使用prim算法,prim算法的过程中维护了一个dis数组,这里我们可以发现数组的值单调递减,并且只有01两种取值
因此我们考虑用数据结构去加速他,具体来说就是维护两个集合一个集合存1,记为s1,一个存0记为s2
然后最重要的就是如何更新这个dis数组,也就是s1和s2的更新
显然我们只能去选择遍历权值为1的边,因此每加进去一个点,我们遍历他出发的所有的边,显然如果他出现在了s1中,那么这个数还应该出现在s1中,否则他就应该进去s2
这个操作我们可以用通过再加一个set搞定
int n,m;
vector<int> g[maxn];
bool vis[maxn];
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
g[x].push_back(y);
g[y].push_back(x);
}
vis[1]=1;
set<int> zero,one;
for(int i:g[1]){
if(i!=1) {
one.insert(i);
}
}
for(int i=2;i<=n;i++)
if(!one.count(i)) zero.insert(i);
set<int> t;
int ans=0;
for(int cc=0;cc<n-1;cc++){
int x;
if(zero.size()) x=*zero.begin(),zero.erase(x);
else x=*one.begin(),one.erase(x),ans++;
t.clear();
vis[x]=1;
for(auto y:g[x]){
if(!vis[y]) {
if(one.count(y)) one.erase(y),t.insert(y);
}
}
for(int y:one)
zero.insert(y);
one.clear();
one=t;
}
cout<<ans<<endl;
}
cf1242B的更多相关文章
- CF1242B. 0-1 MST
题目大意 有一个n个点的完全图,上面有m条边的权值为1,其余为0 求MST n,m<=10^5 题解 方法一: 维护一个点集,表示当前MST中的点 一开始任意加一个点 对于一个未加入的点,如果和 ...
随机推荐
- 学习记录(安装spark)
根据林子雨老师提供的教程安装spark,用的是网盘里下载的课程软件 将文件通过ftp传到ubantu中 根据教程修改配置文件,并成功安装spark 在修改配置文件的时候出现了疏忽,导致找不到该文件,最 ...
- DOCKER 学习笔记5 Springboot+nginx+mysql 容器编排
前言 在上节的内容中,我们已经通过一个简单的实例,将Docker-compose 进行了实际的应用.这一小节中.我们将通过学习和了解,着重认识容器的编排,上一节只算是一个小小的测试.在这一节中.我们将 ...
- 1-NoSQL介绍及Redis安装
背景 随着互联网的不断发展和软件架构的不断复杂化,同时随着网站访问量的日渐上升,导致传统单机关系型数据库应用已经无法满足人们的需求,在高并发的场景下,频繁的数据库存取操作使得服务器压力剧增,甚至导致服 ...
- Linux文件和目录的属性及权限总结
本文讲述的是文件或目录的属性及权限,比如索引节点inode.文件类型.文件权限及属主:还对setuid.setgid及粘贴位进行了相关的讲解.其中,对ln.chmod.chown.chgrp.umas ...
- Java学习笔记----打印基本数据类型范围
/** * Created by N3verL4nd on 2016/11/10. */ public class HelloWorld { public static void main(Strin ...
- Java集合XMind与注意事项
Java中集合使用时的几个注意事项: 1.ArrayList和HashMap都具有扩容 ArrayList初始化数组长度为10,扩容后的容量为原来的1.5倍. HashMap初始化的数组长度为16,扩 ...
- python函数中的参数类型
python函数中的参数 动态获取函数的参数 python的函数类型详解
- CCF_201612-1_最大波动
http://115.28.138.223/view.page?gpid=T47 水. #include<iostream> #include<cstring> #includ ...
- 《Python学习手册 第五版》 -第9章 元组、文件与其他核心类型
本章的主要内容是介绍了元组和文件的使用,同时作为介绍数据类型的最后一个章节,本章也总结和复习了前面所介绍的核心数据类型,总结的部分在此不多介绍,因为前面章节都有,在此就重点介绍以下两点内容 1.元组 ...
- java架构之路-(微服务专题)feign的基本使用和nacos的配置中心
上次回归: 上次我们说了ribbon的基本使用,包括里面的内部算法,算法的细粒度配置,还有我们自己如何实现我们自己的算法,主要还是一些基本使用的知识,还不会使用ribbon的小伙伴可以回去看一下上一篇 ...