题目大意:

n个点,m条边,两个数l和r,如果l和r相连接,那么对于l和r之间值任意一个数都要和l相连。问达到这一目的需要添加的边的最小数量。

题解:

我们首先要找到当前连通块中最大的那个点,也就是说所有小于当前点的点都要和这个点相连,如果不相连的话,加一条边,所以用我们可以用一个mark数组来标记当前当前点是否在当前联通块中,如不在的话,并且当前点的大小小于联通块的最大点的大小,我们就要加一条边。可以用dfs来遍历联通块

#include<bits/stdc++.h>
using namespace std;
const int N=2E5+;
vector<int >ve[N];
int mark[N];
int s=;
void dfs(int x){
mark[x]=;
s=max(s,x);
for(int i=;i<ve[x].size();i++){
int a=ve[x][i];
if(!mark[a]) dfs(a);
}
}
int main(){
int n,m;
cin>>n>>m;
int x,y;
for(int i=;i<=m;i++) {
cin>>x>>y;
ve[x].push_back(y);
ve[y].push_back(x);
}
int ans=;
for(int i=;i<=n;i++){
if(mark[i]) continue ;
if(i<s){
ve[i].push_back(s);
ve[s].push_back(i);
ans++;
}
dfs(i);
}
cout<<ans<<endl;
return ;
}

太秒啦!!!!

D - Harmonious Graph的更多相关文章

  1. Harmonious Graph

    D. Harmonious Graph 好后悔在写这个题之前浪费了几分钟时间,不然我就写出来了.... 因为他就是连通块之间的合并问题,所以就用并查集就好了 复杂度好像也只是线性的吧... 然后就A了 ...

  2. Codeforces Round #600 (Div. 2) D。 Harmonious Graph

    #include<iostream> using namespace std ; ; int p[N]; int cnt; int find(int x) { if(p[x]!=x) p[ ...

  3. Codeforces Round #600 (Div. 2) - D. Harmonious Graph(并查集)

    题意:对于一张图,如果$a$与$b$连通,则对于任意的$c(a<c<b)$都有$a$与$c$连通,则称该图为和谐图,现在给你一张图,问你最少添加多少条边使图变为和谐图. 思路:将一个连通块 ...

  4. Codeforces Round #600 (Div. 2)

    传送门 A. Single Push 直接乱搞即可. Code /* * Author: heyuhhh * Created Time: 2019/11/16 22:36:20 */ #include ...

  5. CF Round #600 (Div 2) 解题报告(A~E)

    CF Round #600 (Div 2) 解题报告(A~E) A:Single Push 采用差分的思想,让\(b-a=c\),然后观察\(c\)序列是不是一个满足要求的序列 #include< ...

  6. [开发笔记] Graph Databases on developing

    TimeWall is a graph databases github It be used to apply mathematic model and social network with gr ...

  7. Introduction to graph theory 图论/脑网络基础

    Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...

  8. POJ 2125 Destroying the Graph 二分图最小点权覆盖

    Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8198   Accepted: 2 ...

  9. [LeetCode] Number of Connected Components in an Undirected Graph 无向图中的连通区域的个数

    Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...

随机推荐

  1. 题解 P3205 【[HNOI2010]合唱队】

    讲讲我的做法 看了题目发现要用区间\(dp\),为什么? 我们发现区间\(dp\)有一个性质--大区间包涵小区间,这道题就符合这样的一个性质 所以我们要用区间\(dp\)来解决这道题. 如何设计状态 ...

  2. Spark作业提交至Yarn上执行的 一个异常

    (1)控制台Yarn(Cluster模式)打印的异常日志: client token: N/A         diagnostics: Application application_1584359 ...

  3. sql学习~pivot和unpivot用法

    pivot  可以把列值转换为输出中的多个列. pivot 可以在其他剩余的列的值上执行聚合函数. unpivot 将列转换为列值 语法 SELECT <non-pivoted column&g ...

  4. 谷歌出品EfficientNet:比现有卷积网络小84倍,比GPipe快6.1倍

    [导读]谷歌AI研究部门华人科学家再发论文<EfficientNet:重新思考CNN模型缩放>,模型缩放的传统做法是任意增加CNN的深度和宽度,或使用更大的输入图像分辨率进行训练,而使用E ...

  5. 技术大佬:我去,你竟然还在用 try–catch-finally

    二哥,你之前那篇 我去 switch的文章也特么太有趣了,读完后意犹未尽啊,要不要再写一篇啊?虽然用的是 Java 13 的语法,对旧版本不太友好.但谁能保证 Java 不会再来一次重大更新呢,就像 ...

  6. WScript.Shell 与 Shell.Application 的不同

    本文主要对比,VBScript 中 CreateObject("WScript.Shell") 和 CreateObject("Shell.Application&quo ...

  7. Springmvc与Struts区别?

    在一个技术群里看到机器人解释的二者区别,在此Mark下. 一.框架机制 spring mvc 和 struts2的加载机制不同:spring mvc的入口是servlet,而struts2是filte ...

  8. SSH免密配置

    1. 在三个节点生成秘钥cd ~/.sshssh-keygen -t rsa 2.合并三个节点的密码cat id_rsa.pub >> authorized_keysssh postgre ...

  9. 图解JVM内存区域划分

    图解JVM类加载机制和双亲委派模型一文中讲述了 Java 类加载的过程,它包含加载.验证.准备.解析.初始化.使用.卸载这 7 个步骤.在准备阶段,JVM会将类加载到内存中,为类变量分配内存并赋予初值 ...

  10. Java刷题知识点总结

    1,方法的重写(override)两同两小一大原则: 方法名相同,参数类型相同 子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限. ...