虫洞(conch)

【题目描述】

HZY 现在在数轴原点处,她想跑到 2000001 这个点上。听说各路 神犇暑假里都在健♂身,所有 HZY 也想不要只是简单地跑步,于是她 决定在这条数轴上造虫洞,具体的,每次可以任选两个[1, 2000000] 之中的实数点,将它们用虫洞连接起来(为了避免不必要的时空错乱, 这两个点不能是同一个点,并且如果一个点已经和其它的点通过虫洞 相连,那就不能选)。 这样一来,在 HZY 跑步的过程中,一旦碰到了某个虫洞的一个端 口,就会从另一个端口出来,继续向正方向跑。 现在 HZY 已经建造了 n 个虫洞。她还想再建造 m 个虫洞,使得她 在跑步过程中穿过虫洞的次数最多。

【输入格式】 从文件 conch.in 中读入数据。 第一行一个整数 n,第二行一个整数 m。 接下来 m 行每行两个整数 a, b( a < b )描述一个已有虫洞的两个端 点。

【输出格式】 输出到文件 conch.out 中。 一行一个数表示再建造 m 个虫洞之后,最多的穿越次数。

input
3
1
10 11
1 4
2 3
output
6

input
3
1
1 3
4 6
2 5
output
8

n,m<=1000000

sol:先暴力走一遍,对于每个走过的虫洞的入口标记为已访问,再把走过的地方也标记为已访问,然后再扫一遍,可以算出没访问的就是一个个的环,每个环有不同贡献,按贡献大小造虫洞,如果m有多的就XJB特判一下

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
int n,m,Go[N],ans=,Sum[N];
bool Vis[N];
inline int Play(int Pos)
{
int res=;
for(;Pos<=&&(!Vis[Pos]);Pos++)
{
Vis[Pos]=;
if(Go[Pos])
{
Pos=Go[Pos]; res++;
}
}
return res;
}
int main()
{
freopen("conch.in","r",stdin);
freopen("conch.out","w",stdout);
int i;
R(n); R(m);
for(i=;i<=n;i++)
{
int a,b; R(a); R(b); Go[a]=b; Go[b]=a;
}
for(i=;i<=;i++)
{
Vis[i]=;
if(Go[i]) {i=Go[i]; ans++;}
}
for(i=;i<=;i++)
{
if(!Vis[i]) Sum[++*Sum]=Play(i);
}
sort(Sum+,Sum+*Sum+);
for(i=*Sum;i>=;i--)
{
if(m) {ans+=Sum[i]+; m--;}
}
if(m) ans+=(m<<)-(m&);
Wl(ans);
return ;
}
/*
input
3
1
10 11
1 4
2 3
output
6 input
3
1
1 3
4 6
2 5
output
8
*/

2019 7.6 T2 虫洞的更多相关文章

  1. [多校联考2019(Round 5 T2)]蓝精灵的请求(二分图染色+背包)

    [多校联考2019(Round 5)]蓝精灵的请求(二分图染色+背包) 题面 在山的那边海的那边住着 n 个蓝精灵,这 n 个蓝精灵之间有 m 对好友关系,现在蓝精灵们想要玩一个团队竞技游戏,需要分为 ...

  2. 2019.2.21 T2题解

    meet 大概思路就是 , 找出相交的路径 , 判断方向 , 分类讨论.. 假设已经找出了相交路径 ... 若方向相同 , 则找到相交路径上边权的最大值 , 若最大值>出发时间差 , 则可行. ...

  3. 2019.2.15 t2

    考虑倒过来计算最短路径长度,设dis[u]表示在最坏情况下,点u到最近的一 个出口的最短路,则p个出口的dis值都是0,答案即为dis[0]. #include <cstdio> #inc ...

  4. 2019.2.14 t2 程序调试

    代码: #include <cstdio> #include <iostream> #include <cstring> #include <algorith ...

  5. kick start 2019 round D T2题解

    题目大意:由N个房子围成一个环,G个人分别顺时针/逆时针在房子上走,一共走M分钟,每分钟结束,每个人顺/逆时针走到相邻的房子.对于每个房子都会记录最后时刻到达的人(可能是一群人).最终输出每个人会被几 ...

  6. [多校联考2019(Round 4 T2)][51nod 1288]汽油补给(ST表+单调栈)

    [51nod 1288]汽油补给(ST表+单调栈) 题面 有(N+1)个城市,0是起点N是终点,开车从0 -> 1 - > 2...... -> N,车每走1个单位距离消耗1个单位的 ...

  7. PYTHON-模块time&datetime+ 目录规范

    1.目录规范 ***** (1)文件夹的规范写法 bin 可执行文件 conf 配置文件 core 主要业务逻辑 db 数据文件 lib 库 (公共代码 第三方模块) log 日志文件 readme ...

  8. datatime 模块

    import datetime # 这个是一个包 里面包含 对时间的处理 对日期的处理datetime.date # 日期相关datetime.time # 时间相关 # 获取当前详细时间print( ...

  9. 蓝书3.3 SPFA算法的优化

    T1 最小圈 bzoj 1486 题目大意: 一个环的权值平均值为定义为一个这个环上所有边的权值和除以边数 求最小的环的权值平均值 思路: 二分一个值 把所有边减去这个值 判断是否有负环 #inclu ...

随机推荐

  1. 怎样终止(杀掉) Linux 中的进程?

    使用 kill -9 进程号 命令, 可是强行终止该进程. 如果使用直接使用 kill 进程号 命令, 则会让进程 "自行了断" . 因此, 一般是 kill -9 进程号 用得较 ...

  2. Scala学习八——继承

    一.本章要点 extends,final关键字和Java一样 重写方法时必须使用override 只有主构造器可以调用超类的构造器 可以重写字段 二.扩展类 Scala扩展类和Java一样(使用ext ...

  3. c# winform 窗体间的传值

    1.父窗体传值给子窗体: 1) 父窗体: FrmXX frm = ,); frm.Owner = this; frm.ShowDialog(); 子窗体: ; public FrmXX(int ty, ...

  4. windows安装npm教程

    1.在使用之前,先类掌握3个东西,明白它们是用来干什么的: npm:  nodejs 下的包管理器. webpack: 它主要用途是通过CommonJS 的语法把所有浏览器端需要发布的静态资源作相应的 ...

  5. eclipse 导入外面的jar

    Eclipse中导入外部jar包 听语音 | 浏览:52620 | 更新:2014-12-07 20:59 | 标签:eclipse 1 2 3 4 5 6 7 分步阅读 在编写java代码时,为方便 ...

  6. 关键词提取算法TF-IDF与TextRank

    一.前言 随着互联网的发展,数据的海量增长使得文本信息的分析与处理需求日益突显,而文本处理工作中关键词提取是基础工作之一. TF-IDF与TextRank是经典的关键词提取算法,需要掌握. 二.TF- ...

  7. Google 开源的 Python 命令行库:初探 fire

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  8. CentOS7连接无线网络

    背景  CentOS7.6最小化安装,没有网线,幸好有无线网卡.下面我们直接进入主题.  附:安装教程 主题--连接无线网络 最小化安装后,裸机没有ifconfig,没有iw,最可怕的是没有网线 但我 ...

  9. NOIP2017 Day1 T3 逛公园

    NOIP2017 Day1 T3 更好的阅读体验 题目描述 策策同学特别喜欢逛公园.公园可以看成一张\(N\)个点\(M\)条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,\(N\)号点 ...

  10. java8 stream().map().collect()用法

    有一个集合: List<User> users = getList(); //从数据库查询的用户集合 现在想获取User的身份证号码:在后续的逻辑处理中要用: 常用的方法我们大家都知道,用 ...