随笔分类 -  图论之网络流

摘要:题意:看是否有无源汇上下界可行流,如果有输出流量 题解:对于每一条边u->v,上界high,下界low,来说,我们可以建立每条边流量为high-low,那么这样得到的流量可能会不守恒(流入量!=流出量),这时我们要想使得流量守恒,我们需要建立附加流,附加流 是在刚才的图上的改进流,对于每一个点如果有 阅读全文
posted @ 2017-11-08 15:11 walfy 阅读(211) 评论(0) 推荐(0)
摘要:题意:给n个人m个星球,每个人适不适合去某个星球,每个星球的最大容量,看能不能满足所有人能去一个星球 题解:可以看出如果直接建边,边的个数是1e5左右的,这样时间肯定会爆掉,那么我们考虑用二进制状态压缩,对于能去相同的星球的全部压缩成一个点,和星球连边,权值为能去的个数,然后这样就只有(1<<10) 阅读全文
posted @ 2017-11-07 23:35 walfy 阅读(188) 评论(0) 推荐(0)
摘要:裸题,就是存个模板 最小费用流是用spfa求解的,目的是方便求解负环,spfa类似于最大流中的bfs过程 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #inc 阅读全文
posted @ 2017-11-07 23:28 walfy 阅读(208) 评论(0) 推荐(1)
摘要:题意:每个人到每个房子一一对应,费用为曼哈顿距离,求最小的费用 题解:单源点汇点最小费用最大流,每个人和房子对于建边 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector 阅读全文
posted @ 2017-11-07 23:26 walfy 阅读(154) 评论(0) 推荐(0)
摘要:求最小割集 dinic处理后用dfs对所有点进行标记,遍历整个联接边,起点访问了,终点没访问或者起点没访问,终点访问了就是最小割集之一 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #inclu 阅读全文
posted @ 2017-06-07 13:21 walfy 阅读(144) 评论(0) 推荐(0)
摘要:刚开始看这题太长了就放着,后来做了之后才发现并不难,就是构造图有点麻烦 一开始写了180行@。@结果tle了,后来想到用map直接访问的话可能会快点,就不用每次循环了 #include<map> #include<set> #include<cmath> #include<queue> #inclu 阅读全文
posted @ 2017-06-07 10:11 walfy 阅读(135) 评论(0) 推荐(0)
摘要:最近博客断更了一段时间啊,快期末了,先把这个专题搞完再说 最小割=最大流 拆点方法很重要,刚开始我拆点不对就wa了,然后改进后tle,应该是数组开小了,一改果然是 #include<map> #include<set> #include<cmath> #include<queue> #include 阅读全文
posted @ 2017-06-06 18:48 walfy 阅读(290) 评论(0) 推荐(0)
摘要:因为数组开小了,导致tle了一整天:( tle的几点原因:http://blog.csdn.net/ameir_yang/article/details/53698478 思路都是对的,把每个人进行拆点,和dining那题差不多,加一个超级源一个超级汇 #include<map> #include< 阅读全文
posted @ 2017-05-26 13:04 walfy 阅读(156) 评论(0) 推荐(0)
摘要:这题就是个模板题,不过我是第一次写dinic,好久没用链式前向星又不会了。。。 时间:9126ms #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #includ 阅读全文
posted @ 2017-05-24 19:44 walfy 阅读(464) 评论(0) 推荐(0)
摘要:这题想了好久,一直认为应该bfs更新后求最小值把发电站最大发电加进去,但是又发现这样求增广路的时候会导致用户更新出错, 加源点和汇点也考虑到了,没想到居然发电量就是超级源到源点的v,居然这么简单@。@ #include<map> #include<set> #include<cmath> #incl 阅读全文
posted @ 2017-05-24 15:00 walfy 阅读(321) 评论(0) 推荐(0)
摘要:这题看了半天看不懂题意。。。还是看的网上题意写的 加一个源点一个汇点,把每个点拆成两个,这两个点的流量是v,其他联通的边都设为无穷大 输入没有1的点就与源点连接,输出只有1的点就与汇点连接 还有这个输出技巧,因为每条反向弧初始容量设置为0,因此完成增广之后,反向弧的容量即为路径。 #include< 阅读全文
posted @ 2017-05-22 18:20 walfy 阅读(634) 评论(0) 推荐(0)
摘要:加一个源点和汇点,把每头牛拆成两个点,不拆点的话可能会出现多对食物与饮料被一个牛享用的情况,拆点后流量为1,不能同时通过了 然后用最大流处理,每个链接边都是1 #include<map> #include<set> #include<cmath> #include<queue> #include<s 阅读全文
posted @ 2017-05-22 15:41 walfy 阅读(174) 评论(0) 推荐(0)
摘要:Ford-Fulkerson方法:dfs实现 dfs 140ms #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #includ 阅读全文
posted @ 2017-05-21 15:57 walfy 阅读(211) 评论(0) 推荐(0)