正题

题目链接:https://ac.nowcoder.com/acm/contest/1101#question


题目大意

nnn个点mmm条边的沙漠(所有联通子图都是仙人掌),删除kkk个点使得剩下的连通块最多。


解题思路

对于图上的每条割边,删去之后就可以多出一个联通块,所以我们就可以先删去所有割边。

之后图上剩下许多个环,没两个环之间由一个割点连接,所以我们可以用缩点双联通分量的方法找出所有的环。

我们发现对于每个环删除一条边之后就可以变成一条链,也就是我们删除kkk条边就会多出k−1k-1k−1个联通块。然后我们可以对于所有的环按照大小排序,然后从大的到小的分成链。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
const int N=1e6+10;
struct node{int to,next;
}a[N*4];
int n,m,k,tot=1,ans,c,cnt,num;
int dfn[N],low[N],ls[N],cir[N];
bool mark[N*4],flag;
stack<int> s;
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void tarjan(int x,int edge)
{dfn[x]=low[x]=++cnt;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(!dfn[y]){tarjan(y,i);low[x]=min(low[x],low[y]);if(low[y]>dfn[x]){mark[i]=mark[i^1]=1;if(k) ans++,k--;}}else if(i!=(edge^1))low[x]=min(low[x],dfn[y]);}
}
void tarjan2(int x)
{dfn[x]=low[x]=++cnt;s.push(x);for(int i=ls[x];i;i=a[i].next){if(mark[i]) continue;int y=a[i].to;if(!dfn[y]){tarjan2(y);num=0;low[x]=min(low[x],low[y]);if(low[y]>=dfn[x]){int z;do{z=s.top();num++;s.pop();}while(z!=y);num++;cir[++c]=num;}}else low[x]=min(low[x],dfn[y]);}
}
int main()
{//freopen("2.in","r",stdin);scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i,0),ans++;cnt=0;memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));for(int i=1;i<=n;i++)if(!dfn[i])tarjan2(i);sort(cir+1,cir+1+c);for(int i=c;i>=1;i--){if(k<2) break;ans+=min(k,cir[i])-1;k-=min(k,cir[i]);}printf("%d",ans);
}

牛客-沙漠点列【tarjan】相关推荐

  1. 牛客假日团队赛8:H.Cell Phone Network(最小支配集)

    链接:https://ac.nowcoder.com/acm/contest/1069/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...

  2. 牛客小白月赛12 I 华华和月月逛公园 (tarjian 求桥)

    链接:https://ac.nowcoder.com/acm/contest/392/I 来源:牛客网 华华和月月逛公园 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K, ...

  3. 牛客网-推理判断练习

    牛客网-练习 1.存疑时有利于被告原则是指在刑事诉讼中遇到事实无法查清或查清事实所需成本过高的情况,依照有利于被告的原则判决. 根据上述定义,下列表现符合该原则的是: 正确答案: C 你的答案: C ...

  4. “蔚来杯“2022牛客暑期多校训练营7 L Maximum Range(强连通缩点+网络流输出方案)

    "蔚来杯"2022牛客暑期多校训练营7 L Maximum Range(强连通缩点+网络流输出方案) 题意 找一个环 上面的边权 极差最大 并输出 点 思路 我们先强联通缩点 统计 ...

  5. 2018年牛客多校算法寒假训练营练习比赛(第四场)

    石油采集 链接:https://ac.nowcoder.com/acm/contest/11834/A 来源:牛客网 随着海上运输石油泄漏的问题,一个新的有利可图的行业正在诞生,那就是撇油行业.如今, ...

  6. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

  7. 2022牛客暑期多校训练营3 个人题解

    title :2022牛客暑期多校训练营3 题解 date : 2022-8-16 tags : ACM,练习记录 author : Linno 2022牛客暑期多校训练营3 题解 题目链接 :htt ...

  8. [C++] 牛客网:合并两个有序的数组

    主要是体验一下牛客网里的核心代码模式到底是怎么弄的..还有C++这个东西平常用的太少了,试一试. 以外的还体验到了sort()函数的使用. 来源:牛客网 题目链接:合并两个有序的数组 知识点:数组.双 ...

  9. 牛客~~打篮球~~~模拟水题

    链接:https://www.nowcoder.com/acm/contest/118/D 来源:牛客网 题目描述 1, 2, 3在打篮球, 可是二打一总是不公平的, 于是他们决定一对一,另一个人在边 ...

最新文章

  1. SAP Retail MM42不能修改物料的物料组
  2. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16...
  3. java对象转xml jackson_五分钟Jackson入门(三) JSON数据类XML转换(附项目源码)
  4. Java黑皮书课后题第11章:11.1(Triangle类)设计一个名为Triangle的类来继承GeometricObject类。该类包括:
  5. Android编译工具Freeline的使用
  6. 主板没有rgb接口怎么接灯_纯白信仰打造RGB主机,四件套提升100%性能-Thermaltake...
  7. hbuilderx的快捷键整理pdf_mac键盘快捷键详解,苹果电脑键盘快捷键图文教程
  8. linux 安装 交换分区大小,给已安装的Linux新增Swap交换分区
  9. C# List 扩展排序
  10. 通俗编程——白话NIO之Buffer
  11. 传感器 - 距离传感器
  12. 我需要一个足够大的桌子
  13. SQL Server 数据库数据文件、日志文件剩余可用空间不足处理方法。
  14. ps 抠图 色彩范围
  15. EndNote常见问题:更改DOI号为超链接/用URL代替DOI号等
  16. 两度转向,做社区团购,生鲜电商留给美团的时间并不多
  17. FaShop-开源拖拽式小程序搭建平台
  18. 关于格林尼治时间(GMT)和DateTime相互转换的分享
  19. u8g2库 汉字速查表
  20. Codeforces Round #727 (Div. 2)2021.6.20

热门文章

  1. python读写文件实例_python读写文件的简单示例
  2. android最好的3d游戏机,终极盘点:Android必玩十大超猛3D游戏
  3. java线程带来的异常,java多线程练习之捕获子线程异常例子
  4. 支持向量回归代码_RDKit:基于支持向量回归(SVR)预测logP
  5. ajax上传文件 获取失败,Ajax上传文件/照片时报错TypeError :Illegal invocation的解决方法...
  6. java语言怎样判断文件夹_JAVA语言之如何判断文件,判断文件夹是否存在的代码...
  7. 读取oracle bfile字段,ORACLE中BFILE字段的使用研究_oracle
  8. 堆栈的定义与操作-顺序存储,链式存储(C语言)
  9. [设计模式]合成复用原则
  10. [蓝桥杯][2013年第四届真题]幸运数-模拟+dfs