图论经典例题大赏

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

原文地址:https://www.cnblogs.com/zhuier-xquan/p/11197361.html