bzoj 1023 [SHOI2008]cactus仙人掌图 ( poj 3567 Cactus Reloaded )——仙人掌直径模板
题目: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 )——仙人掌直径模板的更多相关文章
- 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仙人掌图
这道题是我做的第一道仙人掌DP,小小纪念一下…… 仙人掌DP就是环上的点环状DP,树上的点树上DP.就是说,做一遍DFS,DFS的过程中处理出环,环上的点先不DP,先把这些换上的点的后继点都处理出来, ...
- SHOI2008 cactus仙人掌图 和 UOJ87 mx的仙人掌
cactus仙人掌图 题目描述 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus).所谓简单回路就是指在图上不重复经过任何一 ...
- BZOJ 1023: [SHOI2008]cactus仙人掌图 | 在仙人掌上跑DP
题目: 求仙人掌直径 http://www.lydsy.com/JudgeOnline/problem.php?id=1023 题解: 首先给出仙人掌的定义:满足所有的边至多在一个环上的无向联通图 我 ...
- bzoj 1023: [SHOI2008]cactus仙人掌图 2125: 最短路 4728: 挪威的森林 静态仙人掌上路径长度的维护系列
%%% http://immortalco.blog.uoj.ac/blog/1955 一个通用的写法是建树,对每个环建一个新点,去掉环上的边,原先环上每个点到新点连边,边权为点到环根的最短/长路长度 ...
- BZOJ.1023.[SHOI2008]cactus仙人掌图(DP)
题目链接 类似求树的直径,可以用(类似)树形DP求每个点其子树(在仙人掌上就是诱导子图)最长链.次长链,用每个点子节点不同子树的 max{最长链}+max{次长链} 更新答案.(不需要存次长链,求解过 ...
- bzoj 1023: [SHOI2008]cactus仙人掌图【tarjan+dp+单调队列】
本来想先求出点双再一个一个处理结果写了很长发现太麻烦 设f[u]为u点向下的最长链 就是再tarjan的过程中,先照常处理,用最长儿子链和次长儿子链更新按ans,然后处理以这个点为根的环,也就是这个点 ...
- POJ 3567 Cactus Reloaded(仙人掌直径)
题意 裸的仙人掌直径. 题解 先考虑基环树的直径:先算出每颗“树”的直径,再在环上跑DP 再考虑仙人掌的直径:把每个基环树缩成一条边,边长为基环树深度. #include<iostream> ...
随机推荐
- Android笔记之AsyncTask
AsyncTask中的4个回调 onPreExecute(),在doInBackground(Params...)之前运行在UI线程中 onPostExecute(Result),在doInBackg ...
- Django 之 缓存机制
Django 缓存机制 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次 ...
- 我的Android进阶之旅------>解决 Error: ShouldNotReachHere() 问题
在Android项目中创建一个包含main()方法的类,直接右键运行该类时会报如下错误: # # An unexpected error has been detected by Java Runti ...
- 中国移动OnetNet云平台 GET指令使用
GET /devices//datastreams/KEY HTTP/1.1 Host: api.heclouds.com api-key: pmWLtnkDBSreKfvg7GsClUXdXa4A ...
- c# 文件IO操作 StreamReader StreamWriter Split 使用
StreamWriter(String,Boolean) 若要追加数据到该文件中,则为 true:若要覆盖该文件,则为 false. 如果指定的文件不存在,该参数无效,且构造函数将创建一个新文件. 例 ...
- mysql管理工具之pt-heartbeat
之前我一直用Seconds_behind_master来衡量主从的延迟,今天看到文档,才觉得多么不可靠!以下是官方文档的描述: In essence, this field measures the ...
- mutation与action
mutation 作用: 更改state的状态 说明: 每个mutation对象都有字符串类型(type)与回调函数,在回调函数内进行状态修改,回调函数的第一个参数为state eg: mutatio ...
- 最常用的Eclipse快捷键
最常用的Eclipse快捷键 2015/03/27 | 分类: 基础技术 | 0 条评论 | 标签: ECLIPSE 分享到:0 原文出处: IT江湖 本文是一些最实用.最齐全.最省时间的 Eclip ...
- RSA加密方法java工具类
package com.qianmi.weidian.common.util; import java.io.ByteArrayOutputStream; import java.security.K ...
- 大话设计模式--职责连模式 Chain of Resposibility -- C++实现实例
1. 职责链模式: 使多个对象都有机会处理请求,从而避免请求发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它. 当客户提交一个请求时,请求是沿着链传递直 ...