• DAY 5 上午


    或者跑一个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级别

    证明和启发式合并差不多

  • 相关阅读:
    数组 例题解析
    第六章 数组
    循环控制 例题解析
    第五章 循环控制
    第四章 选择结构程序设计
    第三章 数据的输入与输出
    第一章 程序设计及C语言概述
    C 字符串类型例题讲解与实现字符串库函数
    0XX_javascript核心
    012品优购03
  • 原文地址:https://www.cnblogs.com/lcezych/p/11331247.html
Copyright © 2020-2023  润新知