【LOJ 2788】管道(树上差分)
管道
题目链接:LOJ 2788
题目大意
给你一个 n 个点 m 条边的无向图不一定连通,把每个连通块看做子图,求每一个子图的桥。
n 1e5 m 6e6 空间 16 MB
思路
发现存不下所有的边,但是能存点。
那考虑能不能在一棵生成树上面搞。
那对于一条非树边,它会让树上的一条路径上的边都不会是桥边。
那你把所有非树边都这么限制一下,最后还没有被否决的就是桥边了。
那至于怎么限制,一个想法是树上差分,那就需要找到 LCA。
那你可以二次读入数据,第一次先把生成树建出来,然后弄个树链剖分或者倍增预处理,然后第二次处理非树边,求出 LCA 打标记。
然后最后从下往上,把标记加上去,然后每个点判断一下它跟它父亲的边就行了。
那这样的复杂度是 ,大概有 左右,而且二次读入很慢。
(不过开 O2,再加上加速 cin cout 的 ios::sync_with_stdio(false)
勉强能在 LOJ 卡过)
考虑瓶颈是啥,是你非树边太多了,一个一个打标记都不太行。
而且需要预处理才能得到 LCA。
(虽然有个 LCA,但是似乎有更好的方法)
注意到非树边这么多,比树边还多,真的全有用吗。
会发现当非树边出现环之类的时候,你可以在环上任意选一条边不要,它的贡献是其他边能拼凑出来的。
也就是说,你其实只需要保留非树边的一棵生成树。
那这个时候非树边的数量也降到了 ,我们甚至就可以直接在第一次读入的时候存下所有的非树边,也就不需要二次读入,复杂度也降到了可以通过的
(当然你可以用 的 LCA 做到 )
代码
不需要二次读入数据
勉强卡过的二次读入数据
__EOF__

本文作者:あおいSakura
本文链接:https://www.cnblogs.com/Sakura-TJH/p/LOJ_2788.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Sakura-TJH/p/LOJ_2788.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-03-13 【luogu P4726】【模板】多项式指数函数(多项式 exp)(NTT)
2022-03-13 【luogu P4725】【模板】多项式对数函数(多项式 ln)(NTT)
2022-03-13 七十(环带状矩阵)(高斯消元)
2021-03-13 【luogu P6091】【模板】原根
2021-03-13 【ybt金牌导航8-6-5】最小原根