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

题目链接

类似求树的直径,可以用(类似)树形DP求每个点其子树(在仙人掌上就是诱导子图)最长链、次长链,用每个点子节点不同子树的 max{最长链}+max{次长链} 更新答案。(不需要存次长链,求解过程中先更新ans,然后再更新最长链即可)
设f[i]为点i的诱导子图中最长链的长度。
对于环,我们找一个环上dep[]最小的点x代表这个环 看做一个点(dep为按DFS顺序更新的),求出f[x],环以外的部分像树一样直接做就可以。
对于环的处理:f[x]比较显然,f[x]=max{f[v]+dis(x,v)},v为其环上一点,dis(x,v)为x,v在环上的最小距离。
环上如何更新答案?把环上所有点都拿出来,ans=max{f[u]+f[v]+dis(u,v)}。
u,v是环上的点,按顺序编号,dis(u,v)=v-u(v-u<=len/2),那么ans可以写成 max{f[u]-u+f[v]+v}。固定v,因为u是单增的,所以之前最大的f[u]-u在后面也是最大的,可以用单调队列维护。
dis()是环上最小距离,所以v-u不能超过 环长/2。因为是个环,所以把它拆成一个3/2*len的序列更新ans。
之后用f[v]+dis(x,v)更新f[x]。
扫一遍所有的环,总共复杂度是\(O(m)\)

总:Tarjan,对于不在同一环上的点,用f[x]+f[v]+1更新ans,再用f[v]更新f[x];对于其它的点,像上面那样取出环单调队列处理。

//8760kb    192ms
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=5e4+5,M=N<<2;//边数。。大概最多2n条?int n,m,Ans,Enum,H[N],to[M],nxt[M],dfn[N],low[N],id,fa[N],dep[N],f[N],q[N],A[N<<1];inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}
inline void AddEdge(int u,int v){to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
}
void DP(int x,int ed)
{int n=dep[ed]-dep[x]+1;//lengthfor(int i=n; i; --i) A[i]=f[ed], ed=fa[ed];int n2=n+(n>>1);//能同时更新别的的最多只有n/2个点,所以只需要3/2*n for(int i=n+1; i<=n2; ++i) A[i]=A[i-n];int h=1,t=1; q[1]=1;for(int i=2; i<=n2; ++i)//i,q[]是点,拿出来的A[]是f[]!{while(h<t && i-q[h]>(n>>1)) ++h;Ans=std::max(Ans,A[q[h]]-q[h]+A[i]+i);while(h<=t && A[q[t]]-q[t]<=A[i]-i) --t;//注意这个比较是<,因为更新队首时不是根据值的大小,而是限制条件(<=竟然有90...) q[++t]=i;}for(int i=2; i<=n; ++i)f[x]=std::max(f[x],A[i]+std::min(i-1,n-i+1));
}
void DFS(int x)
{dfn[x]=low[x]=++id;for(int v,i=H[x]; i; i=nxt[i])if((v=to[i])!=fa[x]){if(!dfn[v])fa[v]=x, dep[v]=dep[x]+1, DFS(v), low[x]=std::min(low[x],low[v]);if(low[v]>dfn[x])//不是环 Ans=std::max(Ans,f[x]+f[v]+1), f[x]=std::max(f[x],f[v]+1);low[x]=std::min(low[x],dfn[v]);//无向图,就不需要什么在栈中了 //只需判环,所以和下一行写法一样 
//          low[x]=std::min(low[x],low[v]);}for(int i=H[x]; i; i=nxt[i])if(fa[to[i]]!=x&&dfn[to[i]]>dfn[x]) DP(x,to[i]);//找环的另一个端点 //端点是后访问的点,而不只是&&to[i]!=fa[x]!(当x同时在两个环上时)能找到之前的环和x之后的环,但x不代表(没必要)之前访问的环,这样找环还麻烦。。不是沿to[i]的fa到x。
}int main()
{n=read(),m=read();int num,u,v;while(m--){num=read()-1, u=read();while(num--) v=read(),AddEdge(u,v),u=v;}DFS(1);printf("%d",Ans);return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/8976378.html

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

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

相关文章

Spring Java配置

我发现许多我认识的Spring开发人员仍然不了解或使用Spring Java Configuration&#xff08;aka JavaConfig&#xff09;。 Spring 3.0引入了此功能&#xff0c;该功能使Spring可以完全用Java进行配置-不再需要XML&#xff01; 我真的很喜欢使用JavaConfig&#xff0c;因为&…

纯 CSS 实现波浪效果!

一直以来&#xff0c;使用纯 CSS 实现波浪效果都是十分困难的。 因为实现波浪的曲线需要借助贝塞尔曲线。 而使用纯 CSS 的方式&#xff0c;实现贝塞尔曲线&#xff0c;额&#xff0c;暂时是没有很好的方法。 当然&#xff0c;借助其他力量&#xff08;SVG、CANVAS&#xff09…

Mysql 数据库(三)

一、数值类型 1、整数类型&#xff1a;应用场景&#xff0c;存放年龄&#xff0c;等级&#xff0c;id或者各种号码等等 TINYINT&#xff1a;1个字节存放&#xff0c;有符号范围&#xff1a;-128到127&#xff0c;没有符号范围&#xff1a;0&#xff0c;255 。 SMALLINT&#xf…

Thonny -- 简洁的 python 轻量级 IDE

Thonny目前是 树莓派 上 默认的 Python 开发环境。 该 IDE 是 Institute of Computer Science of University of Tartu &#xff08;爱沙尼亚 的 塔尔图大学 计算机科学院&#xff09;开发的。 最近 yvivid 也体验了一下 Thonny 的开发环境&#xff0c;网站地址为 http://thonn…

如何造成内存泄漏

这将是一个相当邪恶的职位-当您确实希望使某人的生活陷入困境时&#xff0c;您将在谷歌上搜索。 在Java开发领域&#xff0c;内存泄漏只是您在这种情况下会引入的错误类型。 为您的受害者保证几天甚至几周的办公室不眠之夜。 我们将在这篇文章中描述两次泄漏。 两者都很容易理…

二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现

有限元法求解二维 Poisson 方程的 MATLAB 实现 陈 莲a &#xff0c;郭元辉b &#xff0c;邹叶童a ( 西华师范大学 a&#xff0e; 数学与信息学院; b&#xff0e; 教育信息技术中心&#xff0c;四川南充 6437009) 摘 要: 文章讨论了圆形区域上的三角形单元剖分、有限元空间&…

javascript 之异常处理try catch finally--05

语法结构 try catch finally是ECMAScript-262 第三版提供异常处理机制的标准&#xff0c;语法结构如下&#xff1a; 1 try{ 2 //可能会发生的错误代码 3 } 4 catch(error){ 5 //错误处理 6 }finally{ 7 //无论是否有异常都会执行 8 } 语法与大多数语言一样 如java .net&#x…

CSS实现文本周围插入符号

CSS实现文本周围插入符号的方案 本文要讨论的是如何在文本的周围插入图标&#xff0c;怎么样控制它们之间的位置关系&#xff0c;通过HTML结构合理性与CSS属性的使用来比较不同方案所实现效果的优缺点。 常见设计稿要求 在文本前、后、上、下插入图标、线条、三角形、圆形插…

mysql动态sql是什么,mysql中动态sql的一次实际应用

一、前言本次实际应用中&#xff0c;使用到了如下几个要点&#xff1a;mysql的动态建表;mysql的多表插入;mysql的多表更新;mysql的多表删除;二、使用场景2.1 动态建表要求建立多个表&#xff0c;例如电压、电流等表&#xff0c;这些表的字段是完全一样的&#xff0c;只有表名不…

layer绑定回车事件(转)

条件&#xff1a;弹窗后不做任何点击操作或者聚焦操作对于layer.load&#xff0c;弹出后反复按回车&#xff0c;load层将不断刷新&#xff0c;即使设置了自动消失也只有等不按回车键才会生效。对于layer iframe层有表单就更糟糕了&#xff0c;每按一次回车&#xff0c;iframe表…

Spring MVC会话教程

会话管理是每个Web应用程序必不可少的部分。 由于Spring MVC是用于Web开发的功能强大的框架&#xff0c;因此它具有自己的工具和API与会话进行交互。 今天&#xff0c;我打算向您展示Spring MVC应用程序中会话处理的基本方法。 这意味着处理表单&#xff0c;将对象添加到会话中…

height百分比以及高度自适应问题

1. 你曾经是否说想要 高度占页面或者占div百分比无效的问题&#xff0c;相信你也搜索过了&#xff0c;就是说 需要 设置父亲父亲一直到祖宗html都要设置百分比&#xff0c;才有效果。 总之一句话&#xff1a;想用百分比设置他的高度&#xff0c;则它的父亲中至少有一个是固定高…

程序媛,坚持这几个好习惯让你越来越美

身边做编程的女孩子越来越多&#xff0c;她们不仅上得厅堂下得厨房&#xff0c;改的了bug&#xff0c;杀得了木马&#xff0c;关键还能一天二十四小时除了睡觉都与电脑过招&#xff0c;但是每天对着电脑的辐射&#xff0c;熬夜加班敲代码的时候&#xff0c;皮肤也会变得越来越差…

发布Disruptor 3.0.0

我决定对整个版本的Disruptor放置beta标签感到有点无聊&#xff0c;所以决定将Disruptor 3.0.0发行到全世界。 此版本的最大挑战是清理代码并提出一种更好的算法来处理多个生产者。 如果我很幸运&#xff0c;可以更快。 最初&#xff0c;在此版本中&#xff0c;我走了几个阴暗的…

matlab 7 安装序列号,Matlab7序列号

Matlab7.0序列号1&#xff1a;14-13299-56369-16360-32789-51027-35530-39910-50517-56079-43171-43696-14148-64597-46518-35191-10070-58980-25665-36629-51033-46438-01127-52395-28569-20030-38795-14563-11876-23292-58825-37547-05827-26397Matlab7.0序列号2&#xff1a;…

如何运行开源的安卓项目?

第一步:进入github开源安卓项目中&#xff0c;点击clone 第二步&#xff1a;打开android studio&#xff0c;选择checkout从Git中迁出项目 将github的地址复制进去 第三步&#xff1a;系统会自动下载&#xff0c;加载一段时间。然后出现下面的就算是结束了。 最后&#xff0c;运…

命名规范

前面的话 由历史原因及个人习惯引起的 DOM 结构、命名不统一&#xff0c;导致不同成员在维护同一页面时&#xff0c;效率低下&#xff0c;迭代、维护成本极高。所以&#xff0c;使用统一的命名规范非常必要。本文将详细介绍命名规范 目录命名 1、项目文件夹&#xff1a;project…

fis pure开发php,50个精品网站鉴赏

50个精品网站鉴赏介绍给大家的是几千个世界优秀网站中的精中之精的作品&#xff0c;都有非常不错的创意&#xff0c;推荐给众多网站的设计人员&#xff0c;好好借鉴一下别人是怎么设计网站的。这些网站主要的制作工具为FLASH&#xff0c;因为它有较好、较强的动态效果&#xff…

js实现一键复制

方法一&#xff1a; 使用插件 引入clipboard.js 使用如下 <script>copyFn function() {var clipboard new Clipboard(.copy-btn, {text: function(trigger) {return $(.copy-txt).text();}});clipboard.on(success, function() {alert(复制成功&#xff01;);});clipbo…

Maven的Spring Security

1.概述 本文将说明如何使用Maven设置Spring Security&#xff0c;并介绍使用Spring Security依赖项的特定用例。 最新的Spring Security版本可以在Maven Central上找到。 这是上一篇有关Maven的Spring的后续文章 &#xff0c;因此对于非安全性Spring依赖项&#xff0c;这是开始…