题目分享G 二代目
题意:有n组数,每组包含两个数,问在每组只能取一个的前提下能组成的最长的从1开始的连续自然数有几个?
分析:刚学了差分约束系统,很容易往转换成图的方向去想
将他读入的这n组数当成边读入
很容易会得到一个图,这个图不一定是连通的,
我们暂时先把他所有极大连通子图划分为两种:一种是 属于树的,另一种是 不属于树的
显然,1234是属于树的,而5678则不属于树
对于树来说,显然n个节点的树只能选出n-1个节点来,
这个是很容易证明的,如果我们把不选的那个节点作为根节点,那么显然其他的节点是都可以选的,每个节点只需要用其连向父亲的边即可
再考虑图,其实我们依然可以将每个环缩成点,然后继续考虑缩完点之后剩下的树
首先,对于一颗树来说刚刚已经证明了根节点不选,别的节点都选是最优的
而对于一个环来说一定所有节点都是可以选的,这是显然的
那么如果我将这个环缩成的点作为根,虽然这个环没法在树中被选
但这个环中的每个元素都是被选的
也就是说,只要这个极大连通子图不是树就一定所有节点都能选
而对于树来说,会有一个节点是不能选的,那肯定是让最大的不选是最优的
所以只需要用并查集判断是否是树,如果是树再记录一下最大值即可
代码:
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int maxn=1e4+;
- int fa[maxn];
- int mxp[maxn];
- int find(int x)
- {
- while(x!=fa[x]) x=fa[x];
- return x;
- }
- int ya(int x)
- {
- int fax=find(x),nowfa;
- while(x!=fax)
- {
- nowfa=fa[x];
- fa[x]=fax;
- x=nowfa;
- }
- return fax;
- }
- void bing(int x,int y)
- {
- int fax=ya(x),fay=ya(y);
- if(fax==fay) mxp[fax]=maxn;
- else fa[fay]=fax,mxp[fax]=max(mxp[fax],mxp[fay]);
- }
- int main()
- {
- int n,x,y;
- for(int i=;i<maxn;i++) fa[i]=mxp[i]=i;
- scanf("%d",&n);
- while(n--)
- {
- scanf("%d%d",&x,&y);
- bing(x,y);
- }
- int ans=maxn;
- for(int i=;i<maxn;i++) ya(i);
- for(int i=;i<maxn;i++) ans=min(ans,mxp[fa[i]]);
- printf("%d",ans-);
- return ;
- }
题目分享G 二代目的更多相关文章
- 题目分享E 二代目
题意:一棵点数为n的树,每个节点有点权,要求在树中中找到一个最小的x,使得存在一个点满足max(该点点权,该点相邻的点的点权+1,其他点的点权+2)=x 分析:首先要能把题目转化为上述题意 首先题目让 ...
- 题目分享D 二代目
题意:给定一个T条边的无向图,求S到E恰好经过N条边的最短路径 T≤100 N≤1000000 分析:(据说好像假期学长讲过) 首先很容易想到的是dp[i][j][k]表示从i到j经过k条边的最短路径 ...
- 题目分享C 二代目
题意:一个数列是由 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6.....组成,也就是1-1,1-2,1-3......并且如果遇到多位数也要拆成数字比如1-10 ...
- 题目分享H 二代目
题意:有m个限制,每个限制l1,r1,l2,r2四个数,限制了一个长度为n的数第l1到r1位要与第l2到r2相同,保证r1-l1=r2-l2,求在限制下一共有多少种数 分析: 暴力的话肯定是从l1-r ...
- 题目分享F 二代目
题意:T个点R种双向边,P种单向边,求点S到每个点的最短距离 分析:(这再看不出来是spfa就该**了) 首先,这题能否用spfa就看他是否有负环呗,显然,双向边的权值非负,单向边还有个啥政策,总之显 ...
- 郑轻校赛题目 问题 G: 多少个0
问题 G: 多少个0 时间限制: 1 Sec 内存限制: 128 MB提交: 192 解决: 40 题目描述 一个n*n的方格,每个格子中间有一个数字是2或者5,现在从方格的左上角走到右下角,每次 ...
- 2019年腾讯PHP程序员面试题目分享
有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群jq.qq.com 1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除 ...
- 20190924-LeetCode解数独题目分享
解决数独 题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以 ...
- 题目分享X
题意:一张票有n位数,如果这张票的前一半数字的和等于后一半数字的和(n一定是偶数),就称这张票为快乐票.有些数被擦除了,标记为’?’(’?‘的个数也是偶数),现在Monocarp 和 Bicarp 进 ...
随机推荐
- python selenium使用
安装selenium #Python pip install selenium #Anaconda3 conda install selenium 下载浏览器版本对应的驱动文件 chrome chro ...
- hadoop(七)集群配置同步(hadoop完全分布式四)|9
前置配置:rsync远程同步|xsync集群分发(hadoop完全分布式准备三)|9 1. 分布式集群分配原则 部署分配原则 说明Namenode和secondarynamenode占用内存较大,建议 ...
- JS 的事件基础、事件侦听与抛发、
前言 JavaScript是一种事件驱动型语言.事件驱动是指JavaScript引擎并不是在看到代码之后就会立即执行,而是会在合适的时间才去执行.这个合适的时间是指当某个事件发生之后(例如一个输入框的 ...
- 面试 HTTP ,99% 的面试官都爱问这些问题
HTTP 和 HTTPS 的区别 HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字.图片.音频.视频等超 ...
- Candy Distribution
Kids like candies, so much that they start beating each other if the candies are not fairly distribu ...
- Python中关于第三方库的补充
Python语言的强大之处在于它的开源.正是因为它的开源,产生了成百上千的第三方库,涵盖了计算机的几乎所有的方向.第三方库的安装也并不是特别的复杂,通过在cmd中使用pip命令可以安装几乎所有的库,但 ...
- 你自学半年也搞不懂的go底层,看这篇。这篇讲 go的数组、切片、Maps
目录 数组 1.定义数组 2.使用数组 3.定义并赋值 4.数组的大小是类型的一部分 5.数组是值类型(当参数传递到函数中,修改不会改变原来的值) 6.数组长度 7.循环数组 8.多维数组 切片 1. ...
- .NET中 kafka消息队列、环境搭建与使用
前面几篇文章中讲了一些关于消息队列的知识,就每中消息队列中间件,我们并没有做详细的讲解,那么,今天我们就来详细的讲解一下消息队列之一kafka的一些基本的使用与操作. 一.kafka介绍 kafka: ...
- Mybatis源码详解系列(三)--从Mapper接口开始看Mybatis的执行逻辑
简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...
- python函数-易错知识点
定义函数: def greet_users(names): #names是形参 """Print a simple greeting to each user in th ...