题意简述:给出一个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的更多相关文章

  1. CF1242B. 0-1 MST

    题目大意 有一个n个点的完全图,上面有m条边的权值为1,其余为0 求MST n,m<=10^5 题解 方法一: 维护一个点集,表示当前MST中的点 一开始任意加一个点 对于一个未加入的点,如果和 ...

随机推荐

  1. Mysql百万数据量级数据快速导入Redis

    前言 随着系统的运行,数据量变得越来越大,单纯的将数据存储在mysql中,已然不能满足查询要求了,此时我们引入Redis作为查询的缓存层,将业务中的热数据保存到Redis,扩展传统关系型数据库的服务能 ...

  2. python中map()和dict()的用法

    map()用法 map()是python的内置函数,会根据提供的函数对指定序列做映射. 语法: map(func, iter, ...) 其中func为一个功能函数,iter表示可迭代参数序列.map ...

  3. centos7安装lnmp

    一.配置CentOS 第三方yum源(CentOS默认的标准源里没有nginx软件包) [root@localhost ~]# yum install wget #安装下载工具wget [root@l ...

  4. DotNetty发送请求的最佳实践

    长链接发送request/response时, 绝大部分包都是小包, 而每个小包都要消耗一个IP包, 成本大约是20-30us, 普通千兆网卡的pps大约是60Wpps, 所以想要提高长链接密集IO的 ...

  5. Bayesian Non-Exhaustive Classification A case study:online name disambiguation using temporal record streams

    一 摘要: name entity disambiguation:将对应多个人的记录进行分组,使得每个组的记录对应一个人. 现有的方法多为批处理方式,需要将所有的记录输入给算法. 现实环境需要1:以o ...

  6. [Python源码剖析]获取Python小整数集合范围

    #!/usr/bin/env python #-*- coding=utf-8 -*- small_ints = dict() for i in range(-10000,10000): small_ ...

  7. HDU6395 Sequence(矩阵快速幂+数论分块)

    题意: F(1)=A,F(2)=B,F(n)=C*F(n-2)+D*F(n-1)+P/n 给定ABCDPn,求F(n) mod 1e9+7 思路: P/n在一段n里是不变的,可以数论分块,再在每一段里 ...

  8. js算法题

    //较Low,看到的大神 帮补充 1.给定一个数组:,定义一个函数获取数组中所有的奇数,返回一个新数组:var arr1=[1,3,4,5,6,7,8,3,4,2,3,6];    function ...

  9. java 获取两个时间之前所有的日期

    正序(2017-01-01 ~2019-xxxxx) package com.founder.util; import java.text.SimpleDateFormat; import java. ...

  10. MD5加密常用js库:crypto-js

    学习链接:https://github.com/brix/crypto-js