摘要: 本题可以把求解的目标转换成从1到N两条不相交的路径,回想上一题,通过拆点来限制一边只能过一次,capacity为1,cost为-1来跑最大费用流,注意1点和N点的capacity要为2,因为需要过2次,答案就是最大费用流-2,本题的收获是输出路径,从每个点的出点出发(虚点)枚举其连接的下一个入点(实 阅读全文
posted @ 2020-02-12 22:15 GRedComeT 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 三倍经验,三个条件,分别对应了常见的3种模型,第一种是限制每个点只能一次且无交点,我们可以把这个点拆成一个出点一个入点,capacity为1,这样就限制了只选择一次,第二种是可以有交点,但不能有交边,那我们就不需要拆点,限制每条capacity都为1就可以了,第三种直接连,没有限制( #includ 阅读全文
posted @ 2020-02-12 16:47 GRedComeT 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 本题和方格取数一样,也可以分成黑白点,本题加上特判一个点是否有障碍即可,其余和那题没什么区别,挂一下大佬的证明(二分图最大独立集) #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef lo 阅读全文
posted @ 2020-02-12 15:48 GRedComeT 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 费用流问题,每个样本选一次,就连一条capacity为1,权为给定的值,因为可以重复走,再连capacity为无穷,权为0的边,再一次连接给定的出点和汇点即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(- 阅读全文
posted @ 2020-02-12 15:04 GRedComeT 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 有限制的问题,显然考虑全选再根据限制去掉的想法较优,我们发现一个点四周的点受限,其x或者y差一,也就是说奇偶性不同,那我们可以将其分成白点和黑点,就变成了最小割的问题,将每个白点向受限制的黑点连边,capacity为INF,每个黑点向汇点连边,capacity为该点的值,同理,源点向每个白点连边,这 阅读全文
posted @ 2020-02-12 14:01 GRedComeT 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 简单的费用流问题,每个人对每个任务连边,每个任务对汇点连,源点对每个人连,最大费用取反即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long long LL; const in 阅读全文
posted @ 2020-02-12 12:44 GRedComeT 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 简单的最大流问题,一样的设源点汇点,每个单位向每个餐桌连capacity为1的边,源点向每个单位连capacity为人数的边,每个餐桌向汇点连capacity为座位数的边,跑最大流,若flow=总人数则有方案,遍历每一个单位流量为1的点即可 #include<bits/stdc++.h> using 阅读全文
posted @ 2020-02-12 12:11 GRedComeT 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 最小路径覆盖=节点数-最大匹配数,拆成二分图跑dinic/匈牙利即可,注意输出路径的时候判断拆成的入点和出点和另加的反向边 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long l 阅读全文
posted @ 2020-02-12 11:54 GRedComeT 阅读(139) 评论(0) 推荐(0) 编辑