神仙图论题
神仙题,考察了较多图论知识,关于连通性,边双的结论,缩树,妙用并查集,离线,线段树等知识,《难度适中》,是一道很好的题!
题意
给出一个无向图,边有权值,对于每个点,求出起点到它所有坤皇路径的权值权值的最小值。
坤皇路径的定义:经过每条边至多一次,可以多次经过同一个点。
权值:路径上的
。
思路与部分分
怎么做 ?
考虑从小到大加入每条边,使用启发式合并维护连通块,在每一个连通块被联通时更新答案。思维类似归程那个题。
时间复杂度 。
怎么才给 9 分? 怎么才给 9 分?怎么才给 9 分?
怎么做 ?
枚举 , 现在变成了点 到 点 是否存在一条经过边 的坤皇路径,这个问题有一个结论:
在边双连通分量 内,任意两点 之间必然存在一条 的路径经过边双内的任意一条其他边 。
所以边双缩树,1 能经过某条边到达的边双内的点都满足条件。
我最开始在这里想了很久并试图只加入 的边动态维护边双啥的,靠判断连通性,但是对后面的做法是没有帮助的,在这个时候没有必要转化为可行性问题。 直接把 看作权值,那么一个边双的权值就是所有里面的边的 ,树上到根的路径的 即可直接求出。
这也启发着我们 把“全都满足”看作只加入某些边合法,把“存在满足”看作权值,当作最优性问题去解决,不一定都要放到时间轴上出现。
时间复杂度 。
怎么才给 15 分? 怎么才给 15 分?怎么才给 15 分?
怎么做?
考虑像前面维护 的方式从小到大加入每一条边,像前面维护 的方式一样维护权值,每加入一条边后重新维护边双树的结构,更新权值和答案,就可以做到 。
还是有差不多 30 分吧,洗洗睡了。
发现这棵边双树的结构总共只会发生至多 次改变,其中 次是因为连通性的改变, 次是因为边双形态的改变 ,即缩了树上的一个环,若连边的两个端点已经处于同一个边双里了,就不用再更新任何东西了。
考虑刚刚那个动态的过程是不好在线维护的,我们先建出最终的连通性树:显然是最小生成树,然后中途加入的边改变的连通性是可以维护的,使用启发式合并维护。 接下来我们要维护的是边双的合并:在树上加一条边产生的合并边双显然是 路径上的所有点被合并到一个边双里,产生新的权值,这种变化是可以使用并查集在树上维护的,(并查集常常用于维护这种在树上或者序列上每个点只会被删除/修改一次的问题),同时维护边双的连通关系,将边双挂在并查集的顶端。
关于答案的统计:
每个点在第一次与点 在原图意义上联通后暴力更新这片子树的答案,同最开始做 的那样,时间复杂度显然正确,为了知道每个被更新的位置的最值,需要拿一棵区间取 的线段树维护到根路径的 。
当一堆点被合并为一个边双后,若 是这个边双中的某条边, 为现在的时间点,那么对这个点子树中的已经联通的位置进行答案的更新,仅用考虑 是这个边双中的情况,其它情况在 更小的时候已经被考虑过了,用一个区间取 , 单点修改的线段树维护就可以了,在连通后覆盖掉之前没用的权值就行。
时间复杂度 常数大,但是通过 还是很轻松的。
本文已经结束了。本文作者:ღꦿ࿐(DeepSea),转载请注明原文链接:https://www.cnblogs.com/Dreamerkk/p/17093852.html,谢谢你的阅读或转载!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步