因此,我最近开始研究网络流(最大流、最小割等),网络流的一般问题总是涉及到将某物的“n”赋给另一物的“k”。例如,在一个有“k”所学校的城市中,我如何为“n”个孩子建立一个网络流,这样孩子们的家就在学校x公里以内(为了简单起见,我们就说1公里)?
如果我再加上一些限制,比如说每所学校不能超过100名学生,会怎么样还是300个学生?有人能帮助我如何设置我的算法来解决这些问题吗(也希望有人能提供参考)?他们往往在过去的期中考试中出现,所以我只想做好准备
最佳答案
为每个学生和每个学校创建顶点。根据您的距离限制,从每个学生到他们可以就读的每个学校画一个容量为1的边。创建一个源顶点,每个学生的边的容量为1。创建一个下沉顶点,每一所学校都有边缘,每个学校的最大容量等于每个学校的最大容量。
运行一个标准的最大流算法将使尽可能多的学生与学校匹配当然,考虑到种种限制,并不是每个学生都能保证上学。
这基本上是标准的最大二部匹配算法的修改。主要的区别在于水槽的容量大于1,这允许多个学生与一所学校匹配。