BZOJ 1023: [SHOI2008]cactus仙人掌图 | 在仙人掌上跑DP
题目:
求仙人掌直径
http://www.lydsy.com/JudgeOnline/problem.php?id=1023
题解:
首先给出仙人掌的定义:满足所有的边至多在一个环上的无向联通图
我们先考虑一下如何求一棵树的直径
1.维护以每个节点的为根的子树中,以根为一条路径端点的最长路和次长路,
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 50005
using namespace std;
inline int read()
{
int ret=,neg=;char j=getchar();
for (;j>'' || j<'';j=getchar()) if (j=='-') neg=-;
for (;j>='' && j<='';j=getchar()) ret=ret*+j-'';
return ret*neg;
}
int n,m,ecnt,ind,ans;
int head[N],deep[N],f[N],low[N],dfn[N],fa[N];
int a[*N],q[*N],l,r;
struct adj{int v,nxt;}e[*N];
void add(int u,int v)
{
e[++ecnt].v=v;e[ecnt].nxt=head[u];head[u]=ecnt;
e[++ecnt].v=u;e[ecnt].nxt=head[v];head[v]=ecnt;
}
void dp(int root,int x)
{
int tot=deep[x]-deep[root]+;
for (int i=x;i!=root;i=fa[i])
a[tot--]=f[i];
a[tot]=f[root];
tot=deep[x]-deep[root]+;
for (int i=;i<=tot;i++) a[i+tot]=a[i];
q[]=;l=r=;
for (int i=;i<=*tot;i++)
{
while (l<=r && i-q[l]>tot/) l++;
ans=max(ans,a[i]+i+a[q[l]]-q[l]);
while (l<=r && a[q[r]]-q[r]<=a[i]-i) r--;
q[++r]=i;
}
for (int i=;i<=tot;i++)
f[root]=max(f[root],a[i]+min(i-,tot-i+));
}
void dfs(int x)
{
low[x]=dfn[x]=++ind;
for (int i=head[x],v;i;i=e[i].nxt)
if (e[i].v!=fa[x])
{
if (!dfn[v=e[i].v])
{
fa[v]=x;deep[v]=deep[x]+;
dfs(v);
low[x]=min(low[x],low[v]);
}
else low[x]=min(low[x],dfn[v]);
if (dfn[x]<low[v])
ans=max(ans,f[x]+f[v]+),f[x]=max(f[x],f[v]+);
}
for (int i=head[x],v;i;i=e[i].nxt)
if (fa[v=e[i].v]!=x && dfn[x]<dfn[v])
dp(x,v);
}
int main()
{
n=read();m=read();
for (int i=;i<=m;i++)
{
int k=read(),x=read();
for (int i=;i<=k;i++)
{
int y=read();add(x,y);x=y;
}
}
dfs();
printf("%d\n",ans);
return ;
}
BZOJ 1023: [SHOI2008]cactus仙人掌图 | 在仙人掌上跑DP的更多相关文章
- bzoj 1023: [SHOI2008]cactus仙人掌图 tarjan缩环&&环上单调队列
1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1141 Solved: 435[Submit][ ...
- 【刷题】BZOJ 1023 [SHOI2008]cactus仙人掌图
Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的 ...
- bzoj 1023: [SHOI2008]cactus仙人掌图 2125: 最短路 4728: 挪威的森林 静态仙人掌上路径长度的维护系列
%%% http://immortalco.blog.uoj.ac/blog/1955 一个通用的写法是建树,对每个环建一个新点,去掉环上的边,原先环上每个点到新点连边,边权为点到环根的最短/长路长度 ...
- bzoj 1023 [SHOI2008]cactus仙人掌图 ( poj 3567 Cactus Reloaded )——仙人掌直径模板
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1023 http://poj.org/problem?id=3567 因为lyd在讲课,所以有 ...
- bzoj 1023: [SHOI2008]cactus仙人掌图
这道题是我做的第一道仙人掌DP,小小纪念一下…… 仙人掌DP就是环上的点环状DP,树上的点树上DP.就是说,做一遍DFS,DFS的过程中处理出环,环上的点先不DP,先把这些换上的点的后继点都处理出来, ...
- BZOJ.1023.[SHOI2008]cactus仙人掌图(DP)
题目链接 类似求树的直径,可以用(类似)树形DP求每个点其子树(在仙人掌上就是诱导子图)最长链.次长链,用每个点子节点不同子树的 max{最长链}+max{次长链} 更新答案.(不需要存次长链,求解过 ...
- bzoj 1023: [SHOI2008]cactus仙人掌图【tarjan+dp+单调队列】
本来想先求出点双再一个一个处理结果写了很长发现太麻烦 设f[u]为u点向下的最长链 就是再tarjan的过程中,先照常处理,用最长儿子链和次长儿子链更新按ans,然后处理以这个点为根的环,也就是这个点 ...
- 【BZOJ1023】仙人掌图(仙人掌,动态规划)
[BZOJ1023]仙人掌图(仙人掌,动态规划) 题面 BZOJ 求仙人掌的直径(两点之间最短路径最大值) 题解 一开始看错题了,以为是求仙人掌中的最长路径... 后来发现看错题了一下就改过来了.. ...
- 1023: [SHOI2008]cactus仙人掌图 - BZOJ
Description如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回路 ...
随机推荐
- SQL命令(三)
数据完整性约束 1)数据完整性约束包含:实体完整性.参照完整性.用户定义完整性. CREATE TABLE table( id INT NOT NULL AUTO_INCREMENT PRIMARY ...
- python3 练习题100例 (二十二)输入两个字符串,输出两个字符串集合的并集
题目内容: 输入两个字符串,输出两个字符串集合的并集. 为保证输出结果一致,请将集合内元素排序之后再输出, 如对于集合aset,可输出sorted(aset). 输入格式: 共两行,每一行为一个字符串 ...
- json模块、os模块
一.eval模拟序列化操作 1.序列化 内存中的数据-------->转成一种中间格式(字符串)---------->存到文件中 dic={'name':'egon','age':18} ...
- git将本地项目上传到远程仓库
1.cd mygit 打开项目文件夹 2.git init 初始化git 3.git remote add origin xxx(远程仓库地址) 添加远程库 git remote -v 查看远程 ...
- Kubernetes-apiserver
Kubernetes API服务器为API对象验证和配置数据,这些对象包含Pod.Service.ReplicationController等等.API Server提供REST操作以及前端到集群的共 ...
- octave简易操作
语言以分号;结尾if for while等语句后用,来承接关系if ,elseif ,else ,end;for i=1:10,end;while a>3 ,end; while true, ...
- OpenCV代码提取:flip函数的实现
OpenCV中实现图像翻转的函数flip,公式为: 目前fbc_cv库中也实现了flip函数,支持多通道,uchar和float两种数据类型,经测试,与OpenCV3.1结果完全一致. 实现代码fli ...
- XPivot 用户手册及版本更新公示
此文仅介绍XPivot的通用功能,如有对项目中定制的高级功能感兴趣的可留言讨论 XPivot当前版本v2.2 [2015-04-20发布] v2.1 下载链接: http://pan.baidu.co ...
- git安装后Gitbase闪退,gui无法使用问题解决
一般是因为null.sys导致,根本原因应该还是你装的盗版系统有问题,解决办法如下 cmd 打开命题提示符后 输入 sc start null 看 null.sys是否有问题,如果有问题,重新 ...
- 英特尔CEO科再奇:尚未发现通过漏洞获取用户数据的行为
1月9日消息,英特尔CEO科再奇在美国西部时间1月8日举行的2018年CES中发表主题演讲,他在开场时面向产业界谈到了最近报道的安全研究发现.科再奇表示:“在我们开始之前,我想借此机会感谢整个行业,为 ...