博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj千题计划224:bzoj1023: [SHOI2008]cactus仙人掌图
阅读量:7022 次
发布时间:2019-06-28

本文共 1394 字,大约阅读时间需要 4 分钟。

又写了一遍,发出来做个记录

 

#include
#include
#include
using namespace std;#define N 500001int tot=1,front[N],to[N<<2],nxt[N<<2];int id,dfn[N],low[N];int fa[N],dep[N];int dp[N];int tmp[N],q[N];int ans;void read(int &x){ x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }}void add(int u,int v){ to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; to[++tot]=u; nxt[tot]=front[v]; front[v]=tot;}void circle(int x,int y){ int cnt=dep[y]-dep[x]+1; int now=y; while(dfn[fa[now]]>=dfn[x]) tmp[cnt--]=now,now=fa[now]; tmp[cnt]=now; cnt=dep[y]-dep[x]+1; int nn=cnt; for(int i=1;i<=cnt;++i) tmp[++nn]=tmp[i]; int h=0,t=0; for(int i=1;i<=nn;++i) { while(h
cnt/2) h++; if(h
dp[tmp[q[t-1]]]-q[t-1]) t--; q[t++]=i; } for(int i=2;i<=cnt;++i) dp[x]=max(dp[x],dp[tmp[i]]+min(i-1,cnt-i+1));}void tarjan(int x,int y){ dfn[x]=low[x]=++id; int t; for(int i=front[x];i;i=nxt[i]) { if(i==(y^1)) continue; t=to[i]; if(!dfn[t]) { fa[t]=x; dep[t]=dep[x]+1; tarjan(t,i); low[x]=min(low[x],low[t]); } else low[x]=min(low[x],dfn[t]); if(dfn[x]

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8403540.html

你可能感兴趣的文章
vue项目安装步骤
查看>>
Python编程-基础知识-字符串格式化
查看>>
Oracle 维护数据的完整性 一 约束
查看>>
【“零起点”--百度地图手机SDK】如何查询从西单到王府井的公交导航?
查看>>
Newtonsoft.Json高级用法
查看>>
Spring boot 注解简单备忘
查看>>
PHP5.6.x的新鲜事
查看>>
[改善Java代码]不要在构造函数中抛出异常
查看>>
Strom的trident小例子
查看>>
问题2017S01
查看>>
mysql-5.6.23-winx64.zip版本安装记录
查看>>
Cfree clion windows c语言 socket 网络编程
查看>>
maven国内aliyun镜像
查看>>
结对项目-地铁出行路线规划程序(续)
查看>>
洛谷——P1062 数列
查看>>
并发的执行策略
查看>>
netstat和ss
查看>>
(转)iOS如何取得APP的版本信息跟服务器对比进行升级提示?
查看>>
C# PictureBox加载图片并显示进度条
查看>>
C#编码好习惯(转载)
查看>>