题面

隐隐感觉N年前做过一道类似的题。

很显然我们只需要考虑,仅有0边的子图有多少个连通块,然后这个数量减去1就是答案了(这个和kruscal过程等价)。

然后其实就是妥妥的暴力了。。。因为1边数量非常之少,于是我们就可以直接每次暴力合并两个连通块。

显然这里判断是否能合并的 总复杂度是 O(M)的,因为不同阶段连通块的判断不会用到同一条边,而只要两个连通块中有一条不是1的边就可合并;

合并的复杂度的话,启发式合并可以做到 O(N log N)。

于是就愉快的做完了,代码还超好写233

#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define pb push_back
const int N=100005; unordered_map<int,int> mmp[N];
vector<int> g[N];
int n,p[N],m,U,V,sz; int getfa(int x){ return p[x]==x?x:(p[x]=getfa(p[x]));} inline bool can(int x,int y){
for(int i:g[x])
for(int j:g[y]) if(!mmp[i][j]) return 1;
return 0;
} inline void Merge(int x,int y){
if(g[x].size()>g[y].size()) swap(g[x],g[y]);
for(int i:g[x]) g[y].pb(i);
} inline void solve(){
for(int i=1;i<=n;i++) g[i].pb(i),p[i]=i; for(int i=n;i;i--){
bool flag=0;
for(int j=i-1;j;j--) if(can(i,j)){
Merge(i,j),flag=1;
break;
}
sz-=flag,g[i].clear();
}
} int main(){
for(scanf("%d%d",&n,&m),sz=n;m;m--) scanf("%d%d",&U,&V),mmp[U][V]=mmp[V][U]=1;
solve(),printf("%d\n",sz-1);
return 0;
}

  

Codeforces 1243 D 0-1 MST的更多相关文章

  1. Codeforces 160 D. Edges in MST

    \(>Codeforces \space 160 D. Edges in MST<\) 题目大意 : 给出一张带权无向图,求对于这张图上的每一条边,其是必然存在于每一种最小生成树中,还是至 ...

  2. CodeForces 1243"Character Swap (Hard Version)"(multimap)

    传送门 •前置知识-multimap的用法 $multimap$ 与 $map$ 的区别在于一个 $key$ 可以对应几个值: 对于 $map$ 而言,一个 $key$ 只能对应一个值,并且按照 $k ...

  3. CodeForces 450B (矩阵快速幂模板题+负数取模)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51919 题目大意:斐波那契数列推导.给定前f1,f2,推出指定第N ...

  4. poj 1679 The Unique MST【次小生成树】

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24034   Accepted: 8535 D ...

  5. Codeforces Round #535 (Div. 3) 解题报告

    CF1108A. Two distinct points 做法:模拟 如果两者左端点重合就第二条的左端点++就好,然后输出左端点 #include <bits/stdc++.h> usin ...

  6. HDU4081 Qin Shi Huang's National Road System 2017-05-10 23:16 41人阅读 评论(0) 收藏

    Qin Shi Huang's National Road System                                                                 ...

  7. 【spring boot】整合LCN,启动spring boot2.0.3 启动报错:Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

    spring boot 2.0.3启动报错: Error starting ApplicationContext. To display the conditions report re-run yo ...

  8. Codeforces - 527C 平衡树维护几何

    题意:给定一个矩形\(W*H\),一共\(n\)次切割操作(水平/垂直),求每次操作后得出的最大面积 随机按tag扫CF题目找到的题,可以分别用平衡树维护割边的位置和长度(\(x/y\)各两个) 具体 ...

  9. CF1242B. 0-1 MST

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

随机推荐

  1. 学习Electorn(1)——Hello World

    环境 操作系统是Manjaro kde 18.01 按照官网文档:https://electronjs.org/docs 安装node https://nodejs.org/en/download/p ...

  2. s5p6818裸机程序的设计:以GPIO为例

    为了调试方便,首先确保对于硬件的控制没有问题. Makefile # Makefile edited by Schips # 2019-06-21 schips@dingtalk.com # 文件类型 ...

  3. 数据库SQL语句大全——最常用的SQL语句

    检索数据: 检索单个列: SELECT pname FROM product 检索多个列: SELECT pname,market_price,is_hot FROM product 检索所有列: S ...

  4. JS强制关闭浏览器页签并且不提示关闭信息

    工作中很多奇葩的需求都会出现,现在就有一个问题,描述如下: 现在的登录跳转权限页面要去掉,集成在第三方系统信息上,当退出登录的时候需要关掉打开的Tab页面,因此考虑使用window.close()关闭 ...

  5. c#获取本月有哪些周六、周日

    最近项目中有用到本月所有的周六,周日,特此分享一下! 算法思路:写一个循环,条件为本月开始日期.本月截至日期,通过循环获取第一个周六,加一天就是周日,每增加六天就是下一个周六,依次类推,循环到月末 代 ...

  6. JDBC 学习复习6 学习与编写数据库连接池

    之前的工具类DBUtil暴露的问题 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的 ...

  7. Echarts配置项详解

    1.图表标题 title: { x: 'left', // 水平安放位置,默认为左对齐,可选为: // 'center' ¦ 'left' ¦ 'right' // ¦ {number}(x坐标,单位 ...

  8. maven项目下pom.xml依赖报错

    百度了好几次,说是在本地仓库下少plugin,但是找了之后,发现并没有少呀

  9. hashCode 及hashcode与equals的区别

    1.hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 详细了解请 参考 [1]  public int hashCode()返回该对象的哈希码值.支持此方法是为了提高哈 ...

  10. 异步网络编程aiohttp的使用

    aiohttp的使用 aiohttp Asynchronous HTTP Client/Server for asyncio and Python. Supports both Client and ...