题目链接:
https://www.luogu.com.cn/problem/P2050
思路来源博客:
https://www.luogu.com.cn/blog/litble-blog/ti-xie-p2050-mei-si-jie-fei-yong-liu
这个博客真心很棒,建议复习再看
算法:1:最小费用最大流 Dinic+Spfa
思路:
1:这题就是P2053修车https://blog.csdn.net/aiwo1376301646/article/details/104313451的数据加强版,那么建图方式也差不多
2:对于每个菜建立一个点,源点向其连一条流量为需求量费用为0的边
3:然后再建一层点,分别表示第j个厨师做第倒数i道菜。向汇点连一条流量为1费用为0的边
4:把每一个厨师拆为(一共要做的菜的总盘数sum个)而不是菜的种类n个,所以一共有m*sum个厨师节点
5:假设有一个点表示第j个厨师做第倒数k道菜,那么对于菜i,向其连一条流量为1,费用为k×a(i,j)的边。这表示第j个厨师做的倒数第k道菜是菜i,那么就要做a(i,j)这么长的时间,有k个人要等这么长的时间
6:意会一下可以发现,这个模型能解决“同时做”问题
样例图解:
优化:
1:由于此题数据量很大,把所有边连完后再跑费用流是一定会TLE的(60分)
2:由于我们跑一次spfa只能找出一次增广路,所以我们可以暂时不连不需要的边。一开始,我们把所有厨师做倒数第1道菜与所有菜连好,