bzoj千题计划114:bzoj1791: [Ioi2008]Island 岛屿
http://www.lydsy.com/JudgeOnline/problem.php?id=1791
就是求所有基环树的直径之和
加手工栈
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm> using namespace std; #define N 1000001 typedef long long LL; int tot=,front[N],to[N<<],nxt[N<<],l[N<<]; bool vis[N];
int fa[N],dep[N]; int cir[N<<],val[N],cnt; bool inc[N]; LL dp[N],len[N<<],maxn,ans; int h,t,q[N<<]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void add(int u,int v,int w)
{
to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; l[tot]=w;
to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; l[tot]=w;
} int lev2; int st_i2[N],st_x2[N],st_y2[N],st_t2[N]; #define i st_i2[lev2]
#define y st_y2[lev2]
#define x st_x2[lev2]
#define t st_t2[lev2] void dfs(int s,int sf)
{
lev2=;
st_x2[]=s;
start:;
for(i=front[x];i;i=nxt[i])
{
t=to[i];
if(t==y || inc[t]) continue;
st_x2[lev2+]=t;
st_y2[lev2+]=x;
lev2++;
goto start;
end:;
maxn=max(maxn,dp[x]+dp[t]+l[i]);
dp[x]=max(dp[x],dp[t]+l[i]);
}
lev2--;
if(lev2) goto end;
} #undef i
#undef y
#undef t
#undef x int lev; int st_i[N],st_x[N],st_y[N],st_t[N]; #define i st_i[lev]
#define y st_y[lev]
#define x st_x[lev]
#define t st_t[lev] void findcircle(int s)
{
lev=;
st_x[lev]=s;
dep[s]=;
start:;
vis[x]=true;
for(i=front[x];i;i=nxt[i])
{
t=to[i];
if(!vis[t])
{
fa[t]=x;
val[x]=l[i];
dep[t]=dep[x]+;
st_x[lev+]=t;
st_y[lev+]=i;
lev++;
goto start;
end:;
}
else if(i!=(y^))
{
cnt=dep[x]-dep[t]+;
int now=x;
val[x]=l[i];
while(dep[now]>=dep[t])
{
inc[now]=true;
len[cnt]=val[now];
cir[cnt--]=now;
now=fa[now];
}
cnt=dep[x]-dep[t]+;
int nn=cnt;
for(int j=;j<=cnt;++j) cir[++nn]=cir[j],len[nn]=len[j];
for(int j=;j<=nn;++j) len[j]+=len[j-];
for(int j=;j<=cnt;++j) dfs(cir[j],);
h=t=;
for(int j=;j<=nn;++j)
{
while(h<t && q[h]<=j-cnt) h++;
if(h<t) maxn=max(maxn,dp[cir[q[h]]]+dp[cir[j]]+len[j-]-len[q[h]-]);
while(h<t && dp[cir[j]]-len[j-]>dp[cir[q[t-]]]-len[q[t-]-]) t--;
q[t++]=j;
}
} }
lev--;
if(lev) goto end;
} #undef i
#undef y
#undef t
#undef x int main()
{
// freopen("isl.in","r",stdin);
// freopen("isl.out","w",stdout);
int n;
read(n);
int x,y;
for(int i=;i<=n;++i)
{
read(x); read(y);
add(i,x,y);
}
for(int i=;i<=n;++i)
if(!vis[i])
{
maxn=;
findcircle(i);
ans+=maxn;
}
cout<<ans;
}
1791: [Ioi2008]Island 岛屿
Time Limit: 20 Sec Memory Limit: 162 MB
Submit: 1795 Solved: 400
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
3 8
7 2
4 2
1 4
1 9
3 4
2 3
Sample Output
HINT
Source
bzoj千题计划114:bzoj1791: [Ioi2008]Island 岛屿的更多相关文章
- [bzoj1791][ioi2008]Island 岛屿(基环树、树的直径)
[bzoj1791][ioi2008]Island 岛屿(基环树.树的直径) bzoj luogu 题意可能会很绕 一句话:基环树的直径. 求直径: 对于环上每一个点记录其向它的子树最长路径为$dp_ ...
- BZOJ1791: [Ioi2008]Island 岛屿
BZOJ1791: [Ioi2008]Island 岛屿 Description 你将要游览一个有N个岛屿的公园. 从每一个岛i出发,只建造一座桥. 桥的长度以Li表示. 公园内总共有N座桥. 尽管每 ...
- bzoj1791: [Ioi2008]Island 岛屿 单调队列优化dp
1791: [Ioi2008]Island 岛屿 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1826 Solved: 405[Submit][S ...
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
随机推荐
- 项目Beta冲刺(团队)第五天
1.昨天的困难 服务器得不到前端返回的数据 教务处网页的源代码的研究有些困难,有些具体数据还不能得到,jsoup还在探索 2.今天解决的进度 成员 进度 陈家权 点赞界面设计 赖晓连 问答功能各项完善 ...
- 使用JProfiler做性能分析过程
供自己记录一下,也分享给大家使用JProfiler的过程(感谢教我使用这个工具的大佬),整个博客比较粗糙,希望对大家有帮助 1.首先安装好JProfiler,打开eclipse,右键你所要分析的项目, ...
- APP分析----饿了么
产品 饿了么 选择原因:有了外卖就可以轻松拥有一个不用出门也饿不着的爽歪歪周末. 第一部分 调研, 评测 下载软件并使用起来,描述最简单直观的个人第一次上手体验. 主界面: 第一次上手是大一 ...
- [转帖学习] 使用阿里云证书 升级https
nodejs从http升级到https(阿里云证书的使用) https://home.cnblogs.com/u/lhyxq/ 改天买一个域名自己试试. 升级原因 1.各大搜索引擎中,https ...
- 使用Word 进行UTF8 以及字符串编码的转换操作
1. 使用Word文档能够实现 字符串和utf8编码的转换. 快捷键是 ALT+X 在知乎的一个里面看到一个说法: ㍾ ㍽ ㍼ ㍻ - 这四个在Unicode表里是倒序排列的,而且只预留了这四个年号, ...
- 关于Delphi内存表的使用说明
关于Delphi内存表的使用说明: 1.建立临时表 数据输入是开发数据库程序的必然环节.在Client/Server结构中,客户端可能要输入一批数据后,再向服务器的后台数据库提交,这就需要在本地(客 ...
- mysql 开发基础系列3
日期类型 如果要用来表示年月日,通常用DATE 来表示. 如果要用来表示年月日时分秒,通常用DATETIME 表示. 如果只用来表示时分秒,通常用TIME 来表示. TIMESTAMP表示格式 :YY ...
- AND Graph CodeForces - 987F(思维二进制dfs)
题意:给出n(0≤n≤22)和m,和m个数ai,1 ≤ m ≤ 2n ,0≤ai<2n ,把ai & aj == 0 的连边,求最后有几个连通块 解析:一个一个去找肯定爆,那么就要转换一 ...
- Ubuntu实用软件安装[转]
Gedit编辑器配置 Ubuntu14.04从安装软件到卸载软件,删除安装包 linux wget 命令用法详解(附实例说明) ==================================== ...
- FFT常数优化(共轭优化)
最近闲着无聊研究了下\(FFT\)的常数优化,大概就是各种\(3\)次变\(2or1.5\)次之类的,不过没见过啥题卡这个的吧. 关于\(FFT\)可以看这里:浅谈FFT&NTT. 关于复数 ...