洛谷P3153 [CQOI2009]跳舞
首先考虑建图,因为
每个男孩最多只愿意和
个不喜欢的女孩跳舞,而每个女孩也最多只愿意和 个不喜欢的男孩跳舞。
所以对于每个男孩女孩均要建一个辅助点,到该点的权值为
接下来考虑源点到男孩与女孩到汇点的权值情况。
1.如果权值
2.权值大于答案,则有
所以,我可以用遍历权值从
坑点:忘记女孩也要满足小于等于
1 | const int N = 2e4 + 86; |
首先考虑建图,因为
每个男孩最多只愿意和
个不喜欢的女孩跳舞,而每个女孩也最多只愿意和 个不喜欢的男孩跳舞。
所以对于每个男孩女孩均要建一个辅助点,到该点的权值为
接下来考虑源点到男孩与女孩到汇点的权值情况。
1.如果权值
2.权值大于答案,则有
所以,我可以用遍历权值从
坑点:忘记女孩也要满足小于等于
1 | const int N = 2e4 + 86; |
最小割,注意边e要估好,不然RE走起
1 | const LL N = 5e3 + 86; |
P1345 [USACO5.4]奶牛的电信Telecowmunication
转化为最小割,注意起始点为i+n
1 | const int N=12000+96; |
洛谷P1343最大流问题的Dinic解法,bfs分层然后dfs增广,还得捋捋弧优化
因为在Dinic算法中,一条边增广一次后就不会再次增广了,所以下次增广时不需要再考虑这条边。我们把head数组复制一份,但不断更新增广的起点。
UPD:原来是这里写错了
1 | for(int eg=hd[p];eg;eg=e[eg].nxt) |
1 | for (int eg = cur[p]; eg && r; eg = e[eg].nxt) |
1 | const int N=2e3+86; |
用EK算法来做最大流问题,相较于FF算法,EK算法先用bfs找出最小流,然后从汇点开始扣减容量到汇点
1 |
|