• 图论经典例题大赏


    BZOJ 1614架设电话线

    最大值最小!?二分

    二分答案:

    假设需要花费mid元,看是否可以用mid元的花费从1~n。

    对于w<mid的,不需免费,0

    对于w>mid的,必须免费,1

    考虑从1~n可不可以有<k条边权

    以以上的原则建立0/1图。

    求最短路(最短路是几就包含几个1,且是包含最少1的),if disN<=k 就是可行的

    BZOJ1083 繁忙的都市:

    https://www.luogu.org/problemnew/show/P2330

    最小生成树跑一遍就行;

    暴力 O(CMk)显然会炸

    如何解决k=1的问题

    拉上来:

    复制一遍原图,然后连有向边边权为0,跑最短路;

    K条边:

    复制k遍,从第0层的1,到第k层的w的最短路!?

    最后转化为1=> (k-1)*n+n的最短路;

    int d(int k,int i){

    return (k-1)*n+i

    }

    虫洞:负边,小路:正边;

    负环=>可以回到过去;

    判负环:如果一个点进队次数>=n;有负环;可以回到过去

    平均来讲平均进两次队就可以了;每个点进队的次数比较少;

    一个小假设,但是可能被卡,假设进队次数>=一个常数,就很可能有负环;

    跑两遍单源最短路,分别以A,B为起点,找到一个最小的中间点x,使得dis(A,x)+dis(B,x)最小,其中:

    建图:

    对每个集合,新建一个节点,将所有集合中的节点向新节点连一条边权为t的边(t为集合内任意两点互达的时间),由新节点向集合中的点连一条边权为0的边;然后↑

    直观的感受,按照dfs序操作,一定是最优的;

    按照dfs序对宝物排个序,求出相邻两两之间的LCA,然后求最短路,最后还要求最前和最后的最短路;

    插入:在 a,b中插入一个c满足a<c<b;

    -最短路(a,b)+最短路(a,c)+最短路(b,c);

    Bi,j大的有点过分;

    撑死也就300

    然后我们是建立了三维立体图

    对每一条连边,使之边权为1,然后连一条从底部到最上权值为0的边。

    以三点中任意一点为源点,对另两个点求最短路?

     下午;

    可以让m条边按照g作为第一关键字,s作为第二关键字排序

    然后从小到大枚举maxg,把g小于maxg的边放入可用边的集合中

    每次枚举后,在可用边中,按照ss排序

    用(kruskal)求出最小生成树

    可以发现,在前面的枚举中没有用上的边,在后面也不可能被(kruskal)用上,所以可用边最多保留n条

    复杂度O(n×m)

    然后因为gugugu,所以安利博客:here

    题面实际上求的是平面图的最小割;

    平面图的最小割等于其对偶图的最短路;

    平面图:就是可以摊在二维平面中并且边不交叉;

    割:找边集使得把这些点删掉以后源点和终点不连通。

    最小割:所有割中,边权之和最小的割;

    对偶图:对于每一块平面,把它看做一个点,然后对于对偶图的边,一定会与平面图的边有交点;

    那么求出对偶图,跑一个最短路就好了;

     鸣谢jyy

    求一个环,满足这个环的点权之和/边权之和最大;

    把点权看做边权第二维,然后变为有二维的边权,原题变成求一个环,满足边权第二维之和/边权第一维之和最大;

     

    然后二分t,通过看是否有一个环满足上面最后一个式子,如果有,说明答案可行,将t值缩小;

    如果没有,说明不可行,将t值增大;

    简单来说:

    把原图每条边变成Fl-tTl,如果有负环,答案可行,t变小;

    最优比例生成树:(因为要写式子,所以gugugu)

    显然所有的强连通分量里的钱都可以抢走,把每个强连通求出来,缩成一个点,从点1所在的强连通分量,跑一遍求最长路的SPFA,然后判断是否有酒吧,把有酒吧的取一个max

    点数≤100,边数≤1000000(打错了↑)

    SOLUTION:

    倍增Floyd&Floyd快速幂(懵)

    g1[i,j] 从i到j只经过一条边的最短路

    g2[i,j] 从i到j只经过一条边的最短路

    枚举所有中点k

    g2[i,k]=min(g1[i,k]+g1[k,j]);

    g2[i,j]=>g4[i,k];

    gp[i,j]=min(gp/2[i,k]+gp/2[k,j]);

    如何求g19:g3=max(g2[i][k]+g1[k][j]),

    g19[i,j]=max(g16[i,k]+g3[k,j])

     Dwstroying Road gugugu

  • 相关阅读:
    [数学-构造矩阵]NEFU 1113
    设计模式【1】:原型模式【创建对象】
    XML(五)dom4j增删改查
    小规则让你写出美丽又高效的程序
    jQuery源代码解析(3)—— ready载入、queue队列
    cocos2d-Lua02Lua面向对象
    在Linux下用make指令编译进度条程序。
    JS两日期相减
    java debugger
    tomcat server.xml
  • 原文地址:https://www.cnblogs.com/zhuier-xquan/p/11197361.html
Copyright © 2020-2023  润新知