题目分享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 进 ...
随机推荐
- CVPR2020文章汇总 | 点云处理、三维重建、姿态估计、SLAM、3D数据集等(12篇)
作者:Tom Hardy Date:2020-04-15 来源:CVPR2020文章汇总 | 点云处理.三维重建.姿态估计.SLAM.3D数据集等(12篇) 1.PVN3D: A Deep Point ...
- Python高级特性-迭代器和生成器
迭代器 Python中可迭代对象(iterable)通俗指可直接作用与For循环的数据对象,如Python中的集合数据类型,字符串(str),列表(list),元组(tuple),集合(set),字典 ...
- python3(十六) sorted
# sorted()函数list进行排序: L = sorted([36, 5, -12, 9, -21]) print(L) # [-21, -12, 5, 9, 36] # 可以看到默认是按照升序 ...
- go中内存泄露的发现与排查
一,什么是内存泄漏 Go 中的并发性是以 goroutine(独立活动)和 channel(用于通信)的形式实现的.处理 goroutine 时,程序员需要小心翼翼地避免泄露.如果最终永远堵塞在 I/ ...
- awk线程号
for i in `ps|grep [a]out|awk '{print $1}'` do kill -9 "$i" done
- 原生js俄罗斯方块
效果图 方块定位原理通过16宫格定位坐标,把坐标存到数组中去 [ [[2,0],[2,1],[2,2],[1,2]],//L [[1,1],[2,1],[2,2],[2,3]], //左L [[2,0 ...
- 【python系统学习14】类的继承与创新
目录: 目录: [toc] 类的继承 子类和父类 继承的写法 继承示例 父类可以被无限个子类所继承 子类实例可调用父类属性和方法 类的始祖(根类) 根类 - object 实例归属判断 - isins ...
- JavaScript函数作用域和声明提前(3.10.1 page.57)
<h4>3.函数作用域和声明提前</h4> <p> <!--<script type="text/javascript">-- ...
- vs 基础
1 写入 读取: 1) 写入:Console.Write("hello china") 光标紧跟 ...
- centos7 —— 网络连接问题
今天用虚拟机(VM)安装好centos7后,发现无法连接网络,百思不得其解: 第一步:找到需要修改的文件位置,查明原因 #.查看网络是否可以ping通 ~ ping www.baidu.com #.查 ...