随笔分类 -  { 图论 { 网络流 { 最大流 } } }

摘要:枚举所有Strong King的状态(最多1024种左右),然后判断是否合法。 判定合法用网络流,源点-比赛-人-汇点,这样连边。 源点向每场比赛连容量为1的边; 如果一场比赛,A和B,A是Strong King且A的胜场小于B那么这场比赛向A连容量1的边,否则这场比赛向A和B都连容量1的边; 每个 阅读全文
posted @ 2015-12-31 10:48 WABoss 阅读(249) 评论(0) 推荐(0) 编辑
摘要:很容易想到源点向所类型有贴纸连边,容量为Bob一开始有的数量;然后贴纸向汇点连边,容量为1。 接下来就是交换部分的连边了。注意交换一次一次进行,每次只能交换一张。 交换,是对于两种贴纸而言,仅会发生在一种贴纸朋友拥有的数量为0,而另一种朋友拥有的数量大于1。 于是这么建图,对于每一个朋友,如果贴纸数 阅读全文
posted @ 2015-10-29 10:35 WABoss 阅读(214) 评论(0) 推荐(0) 编辑
摘要:题目是给一些数和<数对>的下标,然后进行操作:对某个<数对>中的两个数同时除以一个都能被它们整除且不等于1的数,要求的就是最多能进行多少次操作。 除数一定是素数,就是要决定某素数要除哪些<数对>使除的次数最多, ik + jk is an odd number 可以想到这个是个二分图,数最多100个 阅读全文
posted @ 2015-10-06 21:53 WABoss 阅读(406) 评论(0) 推荐(0) 编辑
摘要:如果只有食物或者饮料那就是个二分图最大匹配。 三个真想不出来。。然后看题解。。从源点到食物到牛到饮料到汇点,这样建图。 所以思维不能太局限了,不懂得把食物和饮料放到牛两边,以为牛吃食物饮料、食物饮料被牛吃是符合逻辑的=。= 1 #include<cstdio> 2 #include<cstring> 阅读全文
posted @ 2015-10-04 21:35 WABoss 阅读(210) 评论(0) 推荐(0) 编辑
摘要:题目简单吧,如果知道题目要干嘛的话。 每个比赛指定A赢或者B赢使它们赢得次数不超过1赢得次数。建立一个二分图模型,X部比赛,Y部队伍,用最大流求解,如果最后最大流等于比赛场数就有解。 然而我还是掉坑里了。。。我多算了1在同一赛区赢的次数。。 1 #include<cstdio> 2 #include 阅读全文
posted @ 2015-10-04 21:02 WABoss 阅读(242) 评论(0) 推荐(0) 编辑
摘要:题目求一张图两条边不重复的最短路。 一开始我用费用流做。 源点到1连容量2费用0的边;所有边,连u到v和v到u容量1费用cost的边。 总共最多会增广两次,比较两次求得的费用,然后输出路径。 然而死MLE不过。。 看了题解,是用最大流的做的。 源点到1连容量为2的边;然后把属于最短路的边都加进去,容 阅读全文
posted @ 2015-10-04 11:05 WABoss 阅读(239) 评论(0) 推荐(0) 编辑
摘要:先Floyd求牛到机器最短距离,然后二分枚举最长的边。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF (1<<30 阅读全文
posted @ 2015-10-03 18:59 WABoss 阅读(173) 评论(0) 推荐(0) 编辑
摘要:题目问的是从1到n再回到1边不重复走的最短路,本质是找1到n的两条路径不重复的尽量短的路。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 阅读全文
posted @ 2015-10-03 11:58 WABoss 阅读(188) 评论(0) 推荐(0) 编辑
摘要:比较形象的是地图每个点都拆成三个点,这三个点限制流量为0或1,于是再一分为二,这样每个点都被拆成6个点。。。 其实拆两个点,连容量为柱子高的边,这样就行了。。 这题我掉坑了,“1 lizard was left behind.”。。虽然样例都把一切都说了。。要注意细节。。 1 #include<cs 阅读全文
posted @ 2015-10-03 11:17 WABoss 阅读(244) 评论(0) 推荐(0) 编辑
摘要:求一次最大流后,分别对所有满流的边的容量+1,然后看是否存在增广路。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF 阅读全文
posted @ 2015-10-02 10:04 WABoss 阅读(238) 评论(0) 推荐(0) 编辑
摘要:有向连通图存在欧拉回路的充要条件是所有点入度=出度。 首先随便给定所有无向边一个方向(不妨直接是u->v方向),记录所有点的度(记:度=入度-出度)。 这时如果有点的度不等于0,那么就不存在欧拉回路,就需要改变那些无向边的方向。 而改变一个无向边的方向,相当于边上两个端点的入度和出度都变化了1,它们 阅读全文
posted @ 2015-10-02 09:22 WABoss 阅读(378) 评论(0) 推荐(0) 编辑
摘要:最大流,ISAP 抄的(http://www.cnblogs.com/wally/p/3274438.html)改了下。。 最小费用最大流 阅读全文
posted @ 2015-10-01 10:32 WABoss 阅读(464) 评论(0) 推荐(1) 编辑