魔力の保有者はいかなる場合も不要なので最初に取り除き、を以上の魔力の保有者の総数としておく。
のケースは簡単で、マンハッタン距離をコストにして、個の騎士・魔力保有者のペアを作る最小重みマッチングを求めればよい。
のケースが難しかった。魔力保有者をあらかじめ魔力の降順にソートしておいて、上位人の魔力保有者とのマッチングを考えればよいのだけれど、とちょうど同じ魔力を持つ者が複数人いたときに誰を選ぶかが問題になる。端的には、次のようにすればよい: (をフローの始点、終点とする)
- から各騎士に、容量、コストの辺を張る。
- 各魔力保有者からに、容量、コストの辺を張る。
- 各騎士からより大きな魔力の保有者に、容量、コストがマンハッタン距離の辺を張る。
- 各騎士からちょうどの魔力の保有者に、容量、コストがマンハッタン距離の辺を張る。
より大きな魔力の保有者が必ずマッチングに含まれるようにしたいので、の補正を入れている。あとは流量の最小コストを求めて、を足して戻せば答えになっている。