[BZOJ]1023: [SHOI2008]cactus仙人掌图

Time Limit: 1 Sec  Memory Limit: 162 MB

Description

  如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus)。所谓简单回路就是指在图上不重复经过任何一个顶点的回路。

 

  举例来说,上面的第一个例子是一张仙人图,而第二个不是——注意到它有三条简单回路:(4,3,2,1,6,5,4)、(7,8,9,10,2,3,7)以及(4,3,7,8,9,10,2,1,6,5,4),而(2,3)同时出现在前两个的简单回路里。另外,第三张图也不是仙人图,因为它并不是连通图。显然,仙人图上的每条边,或者是这张仙人图的桥(bridge),或者在且仅在一个简单回路里,两者必居其一。定义在图上两点之间的距离为这两点之间最短路径的距离。定义一个图的直径为这张图相距最远的两个点的距离。现在我们假定仙人图的每条边的权值都是1,你的任务是求出给定的仙人图的直径。

Input

  输入的第一行包括两个整数n和m(1≤n≤50000以及0≤m≤10000)。其中n代表顶点个数,我们约定图中的顶点将从1到n编号。接下来一共有m行。代表m条路径。每行的开始有一个整数k(2≤k≤1000),代表在这条路径上的顶点个数。接下来是k个1到n之间的整数,分别对应了一个顶点,相邻的顶点表示存在一条连接这两个顶点的边。一条路径上可能通过一个顶点好几次,比如对于第一个样例,第一条路径从3经过8,又从8返回到了3,但是我们保证所有的边都会出现在某条路径上,而且不会重复出现在两条路径上,或者在一条路径上出现两次。

Output

  只需输出一个数,这个数表示仙人图的直径长度。

Sample Input

 (样例1)

  15 3
  9 1 2 3 4 5 6 7 8 3
  7 2 9 10 11 12 13 10
  5 2 14 9 15 10
 (样例2)
  10 1
  10 1 2 3 4 5 6 7 8 9 10

Sample Output

 (样例1)

  8
 (样例2)
  9

HINT

  对第一个样例的说明:如图,6号点和12号点的最短路径长度为8,所以这张图的直径为8。

 

【注意】使用Pascal语言的选手请注意:你的程序在处理大数据的时候可能会出现栈溢出。如果需要调整栈空间的大小,可以在程序的开头填加一句:{$M 5000000},其中5000000即指代栈空间的大小,请根据自己的程序选择适当的数值。

Solution

  对仙人掌做一次dfs得到一棵dfs树,用f[i]表示i到子树中的点的最长距离,对于桥,我们直接更新f[i]=max(f[j]+1),并更新答案;对于环上的边,我们对每个环都统计一次答案并把信息汇总到环中深度最小的点上,汇总信息比较容易,考虑如何在环内统计答案,先把环拆成链,复制一份接在后面,然后对每个点i统计点i在环上向前的环大小一半的个数的点,即ans=max(f[i]+f[j]+dis(i,j))(dis(i,j)<=环的大小/2),这样就可以用单调队列可以维护,总复杂度O(n)。

Code

#include<cstdio>
#include<algorithm>
using namespace std;
inline int read()
{int x;char c;while((c=getchar())<'0'||c>'9');for(x=c-'0';(c=getchar())>='0'&&c<='9';)x=(x<<3)+(x<<1)+c-'0';return x;
}
#define MN 50000
struct edge{int nx,t;}e[MN*4+5];
int h[MN+5],en,d[MN+5],l[MN+5],cnt,fa[MN+5],f[MN+5],ans,a[MN*2+5],an,q[MN*2+5],ql,qr;
inline void ins(int x,int y)
{e[++en]=(edge){h[x],y};h[x]=en;e[++en]=(edge){h[y],x};h[y]=en;
}
void tj(int x)
{int i,j;d[x]=l[x]=++cnt;for(i=h[x];i;i=e[i].nx)if(e[i].t!=fa[x]){if(!d[e[i].t])fa[e[i].t]=x,tj(e[i].t);l[x]=min(l[x],l[e[i].t]);if(l[e[i].t]>d[x])ans=max(ans,f[x]+f[e[i].t]+1),f[x]=max(f[x],f[e[i].t]+1);}for(i=h[x];i;i=e[i].nx)if(fa[e[i].t]!=x&&d[e[i].t]>d[x]){for(an=0,j=e[i].t;j!=x;j=fa[j])a[++an]=f[j];a[++an]=f[x];for(j=1;j<=an;++j)a[j+an]=a[j];for(j=ql=1,qr=0;j<=an<<1;++j){while(ql<=qr&&j-q[ql]>an>>1)++ql;if(ql<=qr)ans=max(ans,a[j]+a[q[ql]]+j-q[ql]);while(ql<=qr&&a[j]-j>=a[q[qr]]-q[qr])--qr;q[++qr]=j;}for(j=1;j<an;++j)f[x]=max(f[x],a[j]+min(an-j,j));}
}
int main()
{int n,m,k,x,y;n=read();m=read();while(m--)for(k=read(),x=read();--k;x=y)ins(x,y=read());tj(1);printf("%d",ans);
}

转载于:https://www.cnblogs.com/ditoly/p/BZOJ1023.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现RTP协议的H.264视频传输系统

1. 引言 随着信息产业的发展&#xff0c;人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频&#xff0c;并越来越强调获取资源的实时性和互动性。但人们又面临着另外一种不可避免的尴尬&#xff0c;就是在网络上看到生动清晰的媒体演示的同时&#xff0c;不得…

机器人网首页应用实例工业自动化 EtherCAT 技术在库卡机器人控制系统上的应用

自 2010 年以来&#xff0c;库卡一直采用 EtherCAT 技术作为所有库卡机器人控制系统中的系统总线。最新的 KR AGILUS 机器人和 LBR iiwa 轻型机器人的紧凑型控制器也是在 EtherCAT 基础上实施的。Beckhoff 基于工业以太网的 EtherCAT因而可以作为整个当前库卡控制系统范围内的…

KVM虚拟机共享存储动态迁移与冷迁移

运行环境一、 配置nfs共享服务器二、 配置KVM虚拟化三、 创建桥接网卡四、 配置kvm服务器并实现动态迁移五、 配置冷迁移运行环境KVM虚拟机两台&#xff08;linux 7.4&#xff09;IP地址&#xff1a;192.168.80.100&#xff08;KVM01&#xff09;IP地址&#xff1a;192.168.80.…

HALCON示例程序surface_scratch.hdev提取划痕

小哥哥小姐姐觉得有用点个赞呗&#xff01; HALCON示例程序surface_scratch.hdev提取划痕 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () dev_close_window () read_image (Image, ‘surface_scratch’) get_image_size (Image, Width…

MySQL--SQL中的安全问题

---恢复内容开始--- 1) SQL 注入简介 SQL 注入(SQL Injection) 就是利用某些数据库的外部接口将用户数据插入到实际的数据库操作语言(SQL)当中&#xff0c;从而达到入侵数据库乃至操作系统的目的。他的产生主要是由程序对用户输入的数据没有进行严格的过滤&#xff0c;导致非法…

伺服驱动器的 三环控制 电流环 速度环 位置环

运动伺服一般都是三环控制系统&#xff0c;从内到外依次是电流环速度环位置环。 1、电流环&#xff1a;电流环的输入是速度环PID调节后的那个输出&#xff0c;我们称为“电流环给定”吧&#xff0c;然后呢就是电流环的这个给定和“电流环的反馈”值进行比较后的差值在电流环内做…

理解LSTM/RNN中的Attention机制

转自&#xff1a;http://www.jeyzhang.com/understand-attention-in-rnn.html&#xff0c;感谢分享&#xff01; 导读 目前采用编码器-解码器 (Encode-Decode) 结构的模型非常热门&#xff0c;是因为它在许多领域较其他的传统模型方法都取得了更好的结果。这种结构的模型通常将…

linux下基于jrtplib库的实时传送实现

linux 下基于jrtplib库的实时传送实现一、RTP 是进行实时流媒体传输的标准协议和关键技术实时传输协议&#xff08;Real-time Transport Protocol&#xff0c;PRT&#xff09;是在 Internet 上处理多媒体数据流的一种网络协议&#xff0c;利用它能够在一对一&#xff08;unicas…

[BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)

Description Input Output Sample Input Sample Output HINT Source Solution 递推式长这样&#xff1a;$f[n]f[n-1]*10^kn$ 对于每一段位数个数相同的$n$&#xff08;如$10\sim99,100\sim999,23333\sim66666,1018701389\sim2147483647$&#xff09;&#xff0c;$k$是个定值 然…

HALCON示例程序texture.hdev检测树木

小哥哥小姐姐觉得有用点个赞呗&#xff01; HALCON示例程序texture.hdev检测树木 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_close_window () Interactive : 0 dev_close_window () read_image (MreutHill, ‘mreut_y’) get_image_size (MreutH…

1、python基础速成

基础模块 def prt(age,name):#函数定义 print("%s is %d 年龄 old"%(name,age)) if __name__"__main__":#程序入口 print("Hello World") prt(45,"gaici") 获取输入&#xff1a;使用input()函数 nameinput("you name &#x…

老男孩博客园杨海潮MySQL--MySQL机构逻辑2

转载于:https://blog.51cto.com/yanfeilai528/2103403

法国标致雪铁龙汽车公司采用通快碟片激光器进行焊接

发布日期&#xff1a;2011-10-14 来源&#xff1a;光电新闻网 发布人&#xff1a;星之球科技 摘要&#xff1a;3月11日消息&#xff0c;十一个碟片激光器&#xff08;disk laser&#xff09;将安装在标致雪铁龙集团的工厂&#xff0c;这家法国汽车制造商准备使用4千瓦的激光器…

h.264 rtp打包

(2011-05-27 08:44:13) 转载标签&#xff1a; 杂谈 payload,H.264 RTP payload 格式 on 2011-2-18 in 博文摘选 | 0 Comment 1. 网络抽象层单元类型 (NALU) NALU 头由一个字节组成, 它的语法如下: --------------- |0|1|2|3|4|5|6|7| -------- |F|NRI| Type | --------------…

jquery live hover绑定方法

$(".select_item span").live({mouseenter:function(){$(this).addClass("hover");},mouseleave:function(){$(this).removeClass("hover");} }); 注意&#xff1a;jquery1.9以上版本不支持live&#xff0c;新方法为on 转载于:https://www.cnblo…

HALCON示例程序vessel.hdev血管的分割与测量

小哥哥小姐姐觉得有用点个赞呗&#xff01; HALCON示例程序vessel.hdev血管的分割与测量 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_window (‘off’) dev_close_window () dev_open_window (0, 0, 512, 512, ‘black’, WindowID) set_d…

电子凸轮

CAM功能是按照一种人为预先设定的曲线关系(可以在线修改,对SEW的变频/伺服控制器而言)来运动的控制应用。 100%速度前馈的位置控制这个观点偶不敢苟同.典型的一些应用。比如:全自动包装机械上,移动锯,其实大家说的电子齿轮&#xff0c;指的就是一种可以调节主从速度比的同步应用…

浙南联合训练赛20180414

这次题目的代码都不长&#xff0c;CF的一贯风格 A - Game CodeForces - 513A Two players play a simple game. Each player is provided with a box with balls. First players box contains exactly n1 balls and second players box contains exactly n2balls. In one move…

原生JS实现苹果菜单

今天分享下用原生JS实现苹果菜单效果&#xff0c;这个效果的重点有以下几点 图标中心点到鼠标的距离的算法 利用比例计算图标的宽度 代码地址&#xff1a;https://github.com/peng666/blogs/blob/gh-pages/menus/index.html 在线测试地址&#xff1a;http://peng666.github.io/…

Gym 100090D Insomnia

从 n 变到 1&#xff0c;有多少种方案&#xff1f; 打表记忆化。 1 #include <bits/stdc.h>2 3 using namespace std;4 5 int n;6 int dp[1000005];7 int dfs(int n) {8 if(n1)9 return 1; 10 if(dp[n]>0) 11 return dp[n]; 12 int cnt0;…