题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1023

   http://poj.org/problem?id=3567

因为lyd在讲课,所以有了lyd的模板。感觉人家写得好好呀!于是学习(抄)了一下。可以记一记。

反正各种优美。那个dp断环成链的地方那么流畅自然!tarjan里的那些 if 条件那么美!

不过十分不明白为什么边要开成4倍的。开成2倍的真的会RE。怎么分析仙人掌的边数?

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=5e4+;
int n,m,hd[N],xnt,dfn[N],low[N],tim,fa[N],f[N],a[N<<],q[N<<],ans;//N<<1!!
struct Ed{
int nxt,to;Ed(int n=,int t=):nxt(n),to(t) {}
}ed[N<<];//<<2(?)
void add(int x,int y)
{
ed[++xnt]=Ed(hd[x],y);hd[x]=xnt;
}
void dp(int x,int y)
{
int m,i,l,r,p;
for(m=;y!=x;y=fa[y])a[++m]=f[y];// a is value
for(a[++m]=f[x],i=;i<m;i++)a[m+i]=a[i];// 2*m-1 is enough
l=r=q[]=;p=(m>>);
for(i=;i<=m+p;i++)
{
while(l<=r&&i-q[l]>p)l++;
ans=max(ans,a[q[l]]+a[i]+i-q[l]);// a[],not f already(i is pos on a[])
while(l<=r&&a[i]>=a[q[r]]+i-q[r])r--;
q[++r]=i;
}
for(int i=;i<m;i++)f[x]=max(f[x],a[i]+min(i,m-i));
}
void tarjan(int cr)
{
dfn[cr]=low[cr]=++tim;
for(int i=hd[cr],v;i;i=ed[i].nxt)
if((v=ed[i].to)!=fa[cr])//!
if(!dfn[v])
{
fa[v]=cr;tarjan(v);
low[cr]=min(low[cr],low[v]);
if(low[v]>dfn[cr])
{
ans=max(ans,f[cr]+f[v]+);
f[cr]=max(f[cr],f[v]+);
}
}
else low[cr]=min(low[cr],dfn[v]);
for(int i=hd[cr],v;i;i=ed[i].nxt)
if(fa[v=ed[i].to]!=cr&&dfn[v]>dfn[cr])dp(cr,v);
}
int main()
{
scanf("%d%d",&n,&m);int k,x,y;
for(int i=;i<=m;i++)
{
scanf("%d%d",&k,&x);
for(int j=;j<k;j++)
{
scanf("%d",&y);
add(x,y);add(y,x);x=y;
}
}
tarjan();
printf("%d",ans);
return ;
}

bzoj 1023 [SHOI2008]cactus仙人掌图 ( poj 3567 Cactus Reloaded )——仙人掌直径模板的更多相关文章

  1. bzoj 1023: [SHOI2008]cactus仙人掌图 tarjan缩环&&环上单调队列

    1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1141  Solved: 435[Submit][ ...

  2. 【刷题】BZOJ 1023 [SHOI2008]cactus仙人掌图

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

  3. bzoj 1023: [SHOI2008]cactus仙人掌图

    这道题是我做的第一道仙人掌DP,小小纪念一下…… 仙人掌DP就是环上的点环状DP,树上的点树上DP.就是说,做一遍DFS,DFS的过程中处理出环,环上的点先不DP,先把这些换上的点的后继点都处理出来, ...

  4. SHOI2008 cactus仙人掌图 和 UOJ87 mx的仙人掌

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

  5. BZOJ 1023: [SHOI2008]cactus仙人掌图 | 在仙人掌上跑DP

    题目: 求仙人掌直径 http://www.lydsy.com/JudgeOnline/problem.php?id=1023 题解: 首先给出仙人掌的定义:满足所有的边至多在一个环上的无向联通图 我 ...

  6. bzoj 1023: [SHOI2008]cactus仙人掌图 2125: 最短路 4728: 挪威的森林 静态仙人掌上路径长度的维护系列

    %%% http://immortalco.blog.uoj.ac/blog/1955 一个通用的写法是建树,对每个环建一个新点,去掉环上的边,原先环上每个点到新点连边,边权为点到环根的最短/长路长度 ...

  7. BZOJ.1023.[SHOI2008]cactus仙人掌图(DP)

    题目链接 类似求树的直径,可以用(类似)树形DP求每个点其子树(在仙人掌上就是诱导子图)最长链.次长链,用每个点子节点不同子树的 max{最长链}+max{次长链} 更新答案.(不需要存次长链,求解过 ...

  8. bzoj 1023: [SHOI2008]cactus仙人掌图【tarjan+dp+单调队列】

    本来想先求出点双再一个一个处理结果写了很长发现太麻烦 设f[u]为u点向下的最长链 就是再tarjan的过程中,先照常处理,用最长儿子链和次长儿子链更新按ans,然后处理以这个点为根的环,也就是这个点 ...

  9. POJ 3567 Cactus Reloaded(仙人掌直径)

    题意 裸的仙人掌直径. 题解 先考虑基环树的直径:先算出每颗“树”的直径,再在环上跑DP 再考虑仙人掌的直径:把每个基环树缩成一条边,边长为基环树深度. #include<iostream> ...

随机推荐

  1. 问题:今天测试模块一直出现一个问题?module 'subprocess' has no attribute 'Popen'

    原因:我起的名字用了模块本身的名字,这个地方一定要切记

  2. Linux显示网络相关信息

    netstat -tlun    查看本机监听的端口 netstat -an      查看本机所有的网络连接 netstat -rn      查看本机路由表 -t TCP协议 -u UDP协议 - ...

  3. 爬虫-【selenium—Webdriver元素定位的八种常用方式

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

  4. bug-3——onload,onbeforeunload,Onunload的区别

    window.onload事件设置页面加载时执行的动作,即进入页面的时候执行的动作.   window.onunload已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用 一般用于设置 ...

  5. java基础入门之数组循环初始化

    /* Name:数组循环化 Power by Stuart Date:2015-4-23 */public class ArrayTest02{ public static void main (St ...

  6. 使用 Python 为 KVM 编写脚本,第 1 部分: libvirt

    虚拟化是目前市场上大多数服务器操作系统的标准设备.在 Linux® 的世界里,服务器虚拟化有两个主要选择:基于 Kernel 的虚拟机 (KVM) 和 Xen.KVM 是 Red Hat 和其他公司采 ...

  7. 牛客练习赛13 B 幸运数字Ⅱ 【暴力】【二分】

    题目链接 https://www.nowcoder.com/acm/contest/70/B 思路 没有代码限制 先打表 打出 幸运数字的表 然后 二分查找 第一个 大于 r 的幸运数字 然后 往 L ...

  8. 每天一个Linux命令(24)tar命令

        tar命令可以为linux的文件和目录创建档案.     (1)用法: 用法:  tar  [选项]   [文件参数]     (2)功能:     功能:  用来压缩和解压文件.tar本身不 ...

  9. 【BZOJ4361】isn

    题目 [BZOJ4361]isn 做法 \(dp_{i,j}\)表示以\(i\)结尾\(j\)长度,树状数组\(tree_{i,j}\)表长度为\(i\),以\(<=j\)结尾的个数,显然\(d ...

  10. Codeforces Round #250 (Div. 2) D. The Child and Zoo 并查集

    D. The Child and Zoo time limit per test 2 seconds memory limit per test 256 megabytes input standar ...