BZOJ1023 [SHOI2008]cactus仙人掌图
滚回第一页去了。。。
好吧,看了题解蒟蒻也写不粗来,怎么办捏?
看这个吧:Orz YDC巨巨;但是巨巨写的程序又不优美,于是程序Orz hzwer
其实这题的重点在于tarjan和单调队列dp里"f的更新"和"ans的更新"的先后顺序。。。
蒟蒻我研究半天才略懂还写不出题解,真是弱到不行了我去 ≥v≤ ~~~
1 /************************************************************** 2 Problem: 1023 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:176 ms 7 Memory:161276 kb 8 ****************************************************************/ 9 10 #include <cstdio> 11 #include <algorithm> 12 13 using namespace std; 14 const int N = 50005; 15 const int M = 20000005; 16 17 struct edges{ 18 int next, to; 19 }e[M]; 20 int first[N], dep[N], f[N]; 21 int dfn[N], low[N], fa[N]; 22 int a[N * 2], q[N * 2], l, r; 23 int n, m, tot, cnt, ans; 24 25 inline int read(){ 26 int x = 0; 27 char ch = getchar(); 28 while (ch < '0' || ch > '9') 29 ch = getchar(); 30 31 while (ch >= '0' && ch <= '9'){ 32 x = x * 10 + ch - '0'; 33 ch = getchar(); 34 } 35 return x; 36 } 37 38 inline void add_edge(int X, int Y){ 39 e[++tot].next = first[X]; 40 first[X] = tot; 41 e[tot].to = Y; 42 } 43 44 void add_Edges(int x, int y){ 45 add_edge(x, y); 46 add_edge(y, x); 47 } 48 49 void DP(int root, int p){ 50 int T = dep[p] - dep[root] + 1; 51 for (int i = p; i != root; i = fa[i]) 52 a[T--] = f[i]; 53 a[T] = f[root]; 54 T = dep[p] - dep[root] + 1; 55 for (int i = 1; i <= T; ++i) 56 a[i + T] = a[i]; 57 q[1] = l = r = 1; 58 for (int i = 2; i <= 2 * T; ++i){ 59 while (l <= r && i - q[l] > T / 2) ++l; 60 ans = max(ans, a[i] + a[q[l]] + i - q[l]); 61 while (l <= r && a[q[r]] - q[r] <= a[i] - i) --r; 62 q[++r] = i; 63 } 64 for (int i = 2; i <= T; ++i) 65 f[root] = max(f[root], a[i] + min(i - 1, T - i + 1)); 66 } 67 68 void dfs(int p){ 69 low[p] = dfn[p] = ++cnt; 70 int x, y; 71 for (x = first[p]; x; x = e[x].next) 72 if ((y = e[x].to) != fa[p]){ 73 if (!dfn[y]){ 74 fa[y] = p, dep[y] = dep[p] + 1; 75 dfs(y); 76 low[p] = min(low[p], low[y]); 77 }else low[p] = min(low[p], dfn[y]); 78 if (dfn[p] < low[y]){ 79 ans = max(ans, f[p] + f[y] + 1); 80 f[p] = max(f[p], f[y] + 1); 81 } 82 } 83 for (x = first[p]; x; x = e[x].next) 84 if (fa[(y = e[x].to)] != p && dfn[p] < dfn[y]) 85 DP(p, y); 86 } 87 88 int main(){ 89 n = read(), m = read(); 90 int k, X, Y, i, j; 91 for (i = 1; i <= m; ++i){ 92 k = read(), X = read(); 93 for (j = 2; j <= k; ++j){ 94 Y = read(); 95 add_Edges(X, Y); 96 X = Y; 97 } 98 } 99 dfs(1); 100 printf("%d\n", ans); 101 return 0; 102 }
View Code
转载于:https://www.cnblogs.com/rausen/p/4044269.html
BZOJ1023 [SHOI2008]cactus仙人掌图相关推荐
- BZOJ1023[SHOI2008]cactus仙人掌图 【仙人掌DP】
题目 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌 图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回路. 举例来说 ...
- [bzoj1023][SHOI2008]cactus仙人掌图【仙人掌】
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1023 [题解] 仙人掌入门题,拿圆方树练练手. 圆方树就是把一个环建一个新方点,然后向 ...
- 2018.10.29 bzoj1023: [SHOI2008]cactus仙人掌图(仙人掌+单调队列优化dp)
传送门 求仙人掌的直径. 感觉不是很难. 分点在环上面和不在环上分类讨论. 不在环上直接树形dpdpdp. 然后如果在环上讨论一波. 首先对环的祖先有贡献的只有环上dfsdfsdfs序最小的点. 对答 ...
- bzoj 1023: [SHOI2008]cactus仙人掌图(仙人掌求直径)
1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3668 Solved: 1535 [Submi ...
- BZOJ 1023: [SHOI2008]cactus仙人掌图
1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2907 Solved: 1212 [Submi ...
- [BZOJ]1023: [SHOI2008]cactus仙人掌图
Time Limit: 1 Sec Memory Limit: 162 MB Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这 ...
- [SHOI2008]cactus仙人掌图
Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的 ...
- 【刷题】BZOJ 1023 [SHOI2008]cactus仙人掌图
Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的 ...
- BZOJ.1023.[SHOI2008]cactus仙人掌图(DP)
题目链接 类似求树的直径,可以用(类似)树形DP求每个点其子树(在仙人掌上就是诱导子图)最长链.次长链,用每个点子节点不同子树的 max{最长链}+max{次长链} 更新答案.(不需要存次长链,求解过 ...
最新文章
- 神经网络的分类准确率是100%到底意味着什么?
- pt1000温度对照表_温度传感器的常用检测方法
- 乐鑫官宣:ESP32-S3真的来了!
- pyqt5讲解10:布局管理讲解大全
- bzoj3884 上帝与集合的正确用法
- e4a html文本,E4A 怎么将剪贴版中的文本 粘贴到窗口的光标处啊?求个代码
- A轮股权学院:激活股权的力量,弄懂这些就够了
- 搭建数字图像处理开发环境(Python+pycharm+opencv)
- docker容器打包成镜像
- 1580. Dean's Debts
- html网站a标签直接下载pdf,不在浏览器打开
- linux ubuntu 版本,ubuntu各版本的区别
- 爬虫项目七:Python对唯品会商品数据、评论数据的爬取
- bzoj3894 文理分科 最小割
- 使用PHP从Access数据库中提取对象,第2部分
- Hive 的insert into 和 insert overwrite
- 队友代码拜读(文末附福利呦)
- Shit Happens
- 单级与多级放大器比较
- 多目标跟踪算法简述——量测-航机关联
热门文章
- 【三】版本之间穿梭切换
- 手把手带你入门Python爬虫(五、CSDN论坛之模型设计)
- Session过期,如何跳出iframe框架页的问题
- 如何查看服务器gpu性能,ubuntu服务器查看GPU和CPU实时使用情况
- 11相机不流畅_小米11有望本月发布,小米10退位让贤,256GB版本跌至3799
- angular js创建表单_如何优雅的使用 Angular 表单验证
- cmd怎么进入linux系统时间,Linux怎么更改命令提示符信息
- 二叉树经典题之二叉树最近公共祖先(LeetCode)
- python3.5 安装PyCrypto
- 软件测试要经过哪几个阶段?