POJ 3567 Cactus Reloaded(仙人掌直径)
题意
裸的仙人掌直径。
题解
先考虑基环树的直径:先算出每颗“树”的直径,再在环上跑DP
再考虑仙人掌的直径:把每个基环树缩成一条边,边长为基环树深度。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- using namespace std;
- const int N=;
- const int M=;
- int cnt,head[N];
- int c[N*],dp[N],q[N*],ans;
- int dfn[N],low[N],tot,fa[N];
- int n,m;
- struct edge{
- int to,nxt;
- }e[M*];
- void add(int u,int v){
- cnt++;
- e[cnt].nxt=head[u];
- e[cnt].to=v;
- head[u]=cnt;
- }
- void getdp(int x,int y){
- int l,r,i,m,p;
- for(m=;y!=x;y=fa[y])c[++m]=dp[y];
- for(c[++m]=dp[x],i=;i<m;i++)c[i+m]=c[i];
- l=r=q[]=;p=m/;
- for(i=;i<=m+p;i++){
- while(l<=r&&i-q[l]>p)l++;
- ans=max(ans,c[i]+c[q[l]]+i-q[l]);
- while(l<=r&&c[i]>=c[q[r]]+i-q[r])r--;
- q[++r]=i;
- }
- for(int i=;i<m;i++)dp[x]=max(dp[x],c[i]+min(i,m-i));
- }
- void Tarjan(int u){
- dfn[u]=low[u]=++tot;
- for(int i=head[u];i;i=e[i].nxt){
- int v=e[i].to;
- if(fa[u]==v)continue;
- if(dfn[v]==){
- fa[v]=u;
- Tarjan(v);
- low[u]=min(low[v],low[u]);
- if(dfn[u]<low[v]){
- ans=max(ans,dp[v]+dp[u]+);
- dp[u]=max(dp[u],dp[v]+);
- }
- }else low[u]=min(low[u],dfn[v]);
- }
- for(int i=head[u];i;i=e[i].nxt){
- int v=e[i].to;
- if(fa[v]!=u&&dfn[u]<dfn[v])getdp(u,v);
- }
- }
- int main(){
- scanf("%d%d",&n,&m);
- for(int i=,a,x;i<=m;i++){
- scanf("%d%d",&a,&x);
- for(int j=,y;j<a;j++){
- scanf("%d",&y);
- add(x,y);
- add(y,x);
- x=y;
- }
- }
- Tarjan();
- printf("%d",ans);
- return ;
- }
POJ 3567 Cactus Reloaded(仙人掌直径)的更多相关文章
- bzoj 1023 [SHOI2008]cactus仙人掌图 ( poj 3567 Cactus Reloaded )——仙人掌直径模板
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1023 http://poj.org/problem?id=3567 因为lyd在讲课,所以有 ...
- bzoj1023 [SHOI2008]cactus仙人掌图 & poj3567 Cactus Reloaded——求仙人掌直径
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1023 http://poj.org/problem?id=3567 仙人掌!直接模仿 ...
- POJ 1985 Cow Marathon && POJ 1849 Two(树的直径)
树的直径:树上的最长简单路径. 求解的方法是bfs或者dfs.先找任意一点,bfs或者dfs找出离他最远的那个点,那么这个点一定是该树直径的一个端点,记录下该端点,继续bfs或者dfs出来离他最远的一 ...
- POJ 3384 Feng Shui 凸包直径 + 半平面交
G++一直没有过了 换成 C++果断A掉了...It's time to bet RP. 题意:给一个多边形,然后放进去两个圆,让两个圆的覆盖面积尽量最大,输出两个圆心的坐标. 思路:将多边形的边向里 ...
- HDU 3594 Cactus (强连通+仙人掌图)
<题目链接> <转载于 >>> > 题目大意: 给你一个图,让你判断他是不是仙人掌图. 仙人掌图的条件是: 1.是强连通图. 2.每条边在仙人掌图中只属于一个 ...
- HDU 3594 Cactus(仙人掌问题)
http://acm.hdu.edu.cn/showproblem.php?pid=3594 题意: 一个有向图,判断是否强连通和每条边只在一个环中. 思路: 仙人掌问题. 用Tarjan算法判断强连 ...
- POJ 1985.Cow Marathon-树的直径-树的直径模板(BFS、DFS(vector存图)、DFS(前向星存图))
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7536 Accepted: 3559 Case ...
- [NEERC2007][SHOI2008]Cactus Reloaded
题目大意: 给你一个仙人掌,求图中相距最远的点对之间的距离. 思路: Tarjan+DP. 我们先考虑一个树的情况. 设用far[u]表示点u出发到其子树中叶子节点的最大距离,若v为u的子结点,很显然 ...
- POJ 1985 求树的直径 两边搜OR DP
Cow Marathon Description After hearing about the epidemic of obesity in the USA, Farmer John wants h ...
随机推荐
- Synergy 共享键盘和鼠标
直接安装Synergy 不行的话加配置文件 ➜ ~ cat synergy.conf section: screens lab712-PC: ckboss-HP: end section: links ...
- springMVC接受参数总结
springMVC接受参数分类及使用对应注解才能正确接受到参数,否则报400或者接受的参数值为null: 1.接受单个参数 @RequestParam 不需要转json串 2.接受一个实体 @Requ ...
- C#生成高清缩略图 (装在自OPEN经验库)
来源 http://www.open-open.com/lib/view/open1389943861320.html 代码如下实现图片的高清缩略图 /// <summary> /// 为 ...
- 肆、js的DOM模型
一.网页中的dom模型框架 1.dom中的3中节点:元素节点.文本节点.属性节点 a.元素节点:html中的各种标签就是各个元素节点,元素节点可以包含其他元素,只有html根节点例外. b.文本节点: ...
- SASS 使用(vs code)
二.在vs code中编译sass 1.在拓展商店里搜索“easy sass”,并安装,安装成功后点重新加载. 2.接下来进行配置: 在 vs code 菜单栏依次点击“文件 首选项 设置”,打开 s ...
- tinymce原装插件源码分析(二)-link
link 功能描述如下: 单纯放置光标: 1.如果光标放到了<a>上,读取a标签的内容,并弹框显示,确定的时候,更新当前a标签. 2.否则,就创建弹框,确定的时候,按照参数添加a标签. s ...
- BZOJ 4103 [Thusc 2015]异或运算 (可持久化01Trie+二分)
题目大意:给你一个长方形矩阵,位置$i,j$上的数是$a_{i}\;xor\;b_{j}$,求某个子矩阵内第$K$大的值 最先想的是二分答案然后验证,然而是$O(qnlogmloga_{i})$,不出 ...
- 题解 洛谷 P3381 【【模板】最小费用最大流】
发了网络流,再来一发费用流 能做费用流的,网络流自然做得来,但在这还是不要脸的安利一下自己的博客(里面也有网络流的题解): 点我 扯远了... 费用流,就是在不炸水管的情况下求源点到汇点的最小费用. ...
- hadoop 2.6.0 LightWeightGSet源码分析
LightWeightGSet的作用用一个数组来存储元素,而且用链表来解决冲突.不能rehash.所以内部数组永远不用改变大小.此类不支持空元素. 此类也不是线程安全的.有两个类型參数.第一个用于查找 ...
- Leetcode--easy系列9
#198 House Robber You are a professional robber planning to rob houses along a street. Each house ha ...