随笔分类 - 图论--网络流--最大流
摘要:$n \leq 40$个人玩$m \leq 10$台游戏机,每台游戏机一秒内只能一人玩,每人一秒内只能玩一台。每台游戏机有个价格,在规定总价格内可以把一部分游戏机复制一次,每台只能复制一次。给每个人对在每台游戏机上的需求时间,求一种方案使得所有玩游戏结束的时间尽量早。每个人每台游戏需求时间$\leq
阅读全文
摘要:$n \leq 50$的图,求其一个子图,使三元环数除以点数最大,输出这个值。 emmmm除法的话上分数规划,$max\frac{三元环}{点}=t$,$max(三元环-t点)=0$。好的,二分这个$t$,然后选一个三元环必须选三个点,可以建最大权闭合子图判定。
阅读全文
摘要:模板。 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 //#include<time.h> 5 //#include<complex> 6 //#include<set> 7 //#include<queue> 8 #in
阅读全文
摘要:$n \leq 50$的两棵树,同编号的点有同个点权,问如何选一个点集,使得这个点集里的点在两棵树内都连通,且总点权最大,输出最大点权和。 枚举一个点在答案里,然后把树以它为根,此时选儿子一定要选父亲,构成最大权闭合子图。 1 #include<iostream> 2 #include<cstrin
阅读全文
摘要:最小点覆盖=最小割 最大独立集与最小点覆盖互补 最大权闭合子图:源正负汇指条件
阅读全文
摘要:大中午看这题有点饿。。 $n \leq 100$的区间。。。不管了好长自己看在这 挺简单的最大权闭合子图。首先一定要选小区间才能选大区间,所以大区间向小区间连边。 然后选一个食物一定要先选它的代号的代价,于是代号建点,食物连代号。代号费用$mx^2$。 然后一个食物一点代价,把它自己的代价减去$a_
阅读全文
摘要:$n \leq 2000$的树有$m \leq 40$个洞,其他点上有各不相同的人,人走一个单位要一个时间,每个洞一秒只能让一人过。问最少多少时间所有人通过洞。 二分答案,然后由于洞口不多,可以把洞口每个时间的状态都表示出来,一个人如果能在$t$时间到达洞就可以向$t,t+1,...$连边。 但边太
阅读全文
摘要:$n \leq 1000,m \leq 2000$的图,每条边是双向的,双向分别有边权,求从1号点的最大边权最小的欧拉回路。 最大值最小--二分,注意图不连通时直接不合法。 接下来就是找是否有欧拉回路,注意这里有些边是不定向的有些边是定向的。为使每个点的入度等于出度,在调整边的时候会有类似“增广”的
阅读全文
摘要:$n \leq 300,m \leq 300$,$n*m$的格子里有起点有终点有空地有障碍,人会从起点选一个同行或同列空地跳过去,然后一直这样跳到终点。求至少删掉多少格子使得人跳不到终点。 首先S和T同行或同列无解。 这不是裸的最小割嘛。。等会这复杂度不大对 优化:一行里的点要连来连去嘛,每个点都要
阅读全文
摘要:$n \leq 100$,$m \leq 100$的$n*m$地图,现进行一个博弈:后手先选个点放棋子,然后先后手轮流向上下左右某个方向移动棋子一步,不能移到障碍点,一个非障碍点不能走两次。问所有后手能赢的位置。 可以发现网格图是一个二分图,在移动时好像在二分图的两边反复横跳。可以在二分图这个模型上
阅读全文
摘要:n<=1000 * m<=1000的网格图(见下)问最小割。 emmm上论文 好东西 然而建边建错WA*3,调试忘删WA*1。 非常好。 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<stdlib.
阅读全文
摘要:n<=200个点m<=40000条边无向图,求 t次走不经过同条边的路径从1到n的经过的边的最大值 的最小值。 最大值最小--二分,t次不重边路径--边权1的最大流。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #i
阅读全文
摘要:n<=200个点m<=1500条无向带权边的图,每个点有人和容量,人可以移动,代价为所有人走过的边的权和,求使所有点人不超过容量的最小代价。 方法一:费用流。 错误!答案与边权不成比例。 方法二:二分一个答案,然后根据floyd求出的最短路看每个点在二分的答案下能去到哪些点,跑最大流检查是否合法。
阅读全文
摘要:n<=50 * m<=50的地图,每块地‘*’表示一定要被填上,‘.’表示一定不能填上,用1*l或l*1,l自定,的板填起来,求最少几块板。 如果是做过那种“一炮打一列或一行,求几炮把地图上的点打掉”的二分图经典题,那就可以类比了。不过这里的行和列是基于联通块的,所以预处理出行联通块和列联通块并编号
阅读全文
摘要:n<=500 *n的格子,给m<=10000个格子有人,一炮可以清掉一行或一列的人(莫名的爽!)求最少几炮干掉所有人。 经典二分图模型!行成点,列成点,一个点就连接一行一列,表示这一行或这一列必选其一! 不喜欢匈牙利!跑网络流! 1 #include<stdio.h> 2 #include<stri
阅读全文
摘要:n<=3000个点m<=20000条无向边的图,有p<=n个出发点,每个出发点都不可拆,现拆一些点使每个出发点都不能到达点1,求最小点数。 简单的最小割。每个点拆成两个x和y,无向边A--B即Ay->Bx,By->Ax,每个点拆成的x和y再连边容量1,然后建超级源向p个点连边,最大流,没了。 错误。
阅读全文
摘要:n<=500,n*n网格给m<=10000个点,每次发射子弹打掉一行或一列的点,求最少几发子弹。 网络流经典模型,每行每列看成点,一个(x,y)表示,表示第x行的点和表示第y列的点必有一个要选,连边。接下来二分图匹配或最大流即可。 1 #include<cstdio> 2 #include<cstr
阅读全文
摘要:n头牛,第i头要SPF(某个参数)在Lowi到Highi的药,药m种每种SPF为Vi,数量为Numi,求最多能满足几头牛。 方法一:什么都看不出来,只知道第i头牛能和一些药匹配,于是网络流,牛向药连容量1的边,起点向牛容量1,药向终点容量为药数量,最大流。 1 #include<cstdio> 2
阅读全文

浙公网安备 33010602011771号