仙人掌
来源:互联网 发布:php 在线直播 编辑:程序博客网 时间:2024/05/06 08:01
仙人掌
题目描述:
LYK 在冲刺清华集训( THUSC)!于是它开始研究仙人掌,它想来和你一起分享它最近研究的结果。
如果在一个无向连通图中任意一条边至多属于一个简单环(简单环的定义为每个点至多经过一次),且不存在自环,我们称这个图为仙人掌。
LYK 觉得仙人掌还是太简单了,于是它定义了属于自己的仙人掌。
定义一张图为美妙的仙人掌,当且仅当这张图是一个仙人掌且对于任意两个不同的点 i,j,存在一条从 i 出发到 j 的路径,且经过的点的个数为|j-i|+1 个。
给定一张 n 个点 m 条边且没有自环的图, LYK 想知道美妙的仙人掌最多有多少条边。
数据保证整张图至少存在一个美妙的仙人掌。
输入格式:
第一行两个数 n,m 表示这张图的点数和边数。
接下来 m 行,每行两个数 u,v 表示存在一条连接 u,v 的无向边。
输出格式:
一个数表示答案
输入样例:
4 6
1 2
1 3
1 4
2 3
2 4
3 4
输出样例:
4
样例解释:
选择边 1-2,1-3,2-3,3-4,能组成美妙的仙人掌,且不存在其它美妙仙人掌有超过 4 条边。
数据范围:
对于 20%的数据 n<=3。
对于 40%的数据 n<=5。
对于 60%的数据 n<=8。
对于 80%的数据 n<=1000。
对于 100%的数据 n<=100000 且 m<=min(200000,n*(n-1)/2)。
思路:
定义一张图为美妙的仙人掌,当且仅当这张图是一个仙人掌
且对于任意两个不同的点 i,j,存在一条从 i 出发到 j 的
路径,且经过的点的个数为|j-i|+1 个。
对于i和i+1要经过2个点即只能是这两个点之间直接有一条边
这n-1条连接i和i+1的边一定选 选完这些边之后正好满足了
任意两点之间的要求
现在即在保证是仙人掌的前提下多选边
接下来选的边要保证没有交集 因为现在已经选了i到i+1的边
其他的边会和现在已经选的边形成环 若选两个有交集的边
则不满足仙人掌的性质
所以问题就转化成了线段覆盖……
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int maxn=200010;int n,m,tot,ans;struct node{ int x; int y; bool operator < (node tmp)const { return y<tmp.y; }}a[maxn*2];int main(){ freopen("cactus.in","r",stdin); freopen("cactus.out","w",stdout); int x,y; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); if(x>=y) swap(x,y); if(x+1==y) continue; a[++tot].x=x;a[tot].y=y; } sort(a+1,a+tot+1); int end=-1; for(int i=1;i<=tot;i++) if(a[i].x>=end) { end=a[i].y; ans++; } cout<<ans+n-1; fclose(stdin);fclose(stdin); return 0;}
- 仙人掌
- 仙人掌
- 芦荟 仙人掌
- 仙人掌直径
- ZJOI2017 仙人掌
- 仙人掌[cactus]
- 【Cactus仙人掌图】仙人掌基础知识学习笔记
- 【Cactus仙人掌图】仙人掌DP学习笔记
- bzoj1023 仙人掌图【仙人掌&&树形dp】
- 只是一盆仙人掌
- 刺猬和仙人掌
- 仙人掌发了芽
- 仙人掌真能防辐射?
- HDU 3594 Cactus 仙人掌
- bzoj 1023 仙人掌图
- bzoj1023 cactus仙人掌图
- [BZOJ2125][仙人掌]最短路
- HDU3594-仙人掌图
- 关于python如何删掉字符中的\t\r\n
- Yii2框架bootstrap样式理解
- CF - 733D STL
- Flume笔记一之简介部署
- 回车、换行的解释
- 仙人掌
- Unity的Json解析<二>–写Json文件
- java-mysql 基本操作3
- CSS设置菜单的横竖转换
- window.innerWidth以及window.outerWidth的区别
- null和undefined的区别整理
- Unity的Json解析<一>--读取Json文件
- 11.4模拟赛
- oracle新建数据库实例脚本sql