首页 > 其他 > 详细

DAY 5 上午

时间:2019-08-10 14:32:54      阅读:101      评论:0      收藏:0      [点我收藏+]

技术分享图片

技术分享图片

或者跑一个dp

dp[i]表示总花费不超过i的情况下的最短路

dij套dp

o(nk)个点

对于每一个点u,建立k+1个点表示到点u花费费用为i

比如u-->v长度为c

u,0-->v,c

u,1-->v,c+1

技术分享图片

技术分享图片

二分答案mid

只能通过限重>=mid的边

把这些边都加进去

判断1n联通

 

 

dijkstra

if(dis[v]<min(dis[u],w)) dis=min(dis[u],w)

 

kruscal

其实就是找到一棵最大生成树

贪心思想每一次加上最大的边

如果联通就换下一条边

这不就是kruscal吗?

当第一次使1n联通的时候,这一次加的边就是答案

技术分享图片

把优惠条件看成一种边

u-->v长度为w

从某一个点出发走到1就是一种方案

希望走最短路

反向建边跑1到其它点的最短路

枚举区间,然后跑dij

但是m可能很大,怎么办?

发现n很小,只有100

所以我们只需要以每一个真实存在的地位作为端点就好了 枚举量o(n)

技术分享图片

技术分享图片

技术分享图片

技术分享图片

STL优先队列怎么合并

启发式合并

合并ab,看看a和b分别多大

把点比较少的堆拆掉,一个个合并到另一个堆

每一个点至多产生logn次合并代价

O(nlognlogn)

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

独立集:具有遗传性和交换性

x1a+x2b+x3c=0

生成森林:选出一些边集构成森林

技术分享图片

技术分享图片

 

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

dfs序上限是2n(点数+边数)

找到出现的最晚a和最早b,在这个区间内一定出现过他们的lca

找到高度最小的点就是他们的lca

o(nlogn)预处理,O(1)查询

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

 技术分享图片

技术分享图片

技术分享图片

每个点一定属于一个重链

技术分享图片

重链条数和轻边边数是logn级别

证明和启发式合并差不多

DAY 5 上午

原文:https://www.cnblogs.com/lcezych/p/11331247.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!