分治法解法:
感觉能用分治法解的问题都有自相似性吧。
就是说把大的情况按某种方式切成几个小的情况,这些小的情况和大的情况是相似的。
如果满足这个条件,那么最简单的情况的解答方案是显然的。
我们只需要考虑好如何合并多个小情况即可。
跟快速排序的思想很像啊。
看紫书P227吧,讲的详细。
最小权完美匹配解法:
黑点和白点个数相同,每个黑点要找一个白点,应该要想到二分图完美匹配。
二分图匹配的算法与模板就这么几个。
唯一能当边权的东西也就是距离了。
思考一下,一个个试试,也就差不多出来了。
要求不相交,则为距离的最小权匹配。还是比较机智的。
用最小费最大流求最小权完美匹配,完美匹配一定存在。
做的时候犯了个小错误,搞了好几个小时。
当时觉得把模板里ll改成double很麻烦,ll范围也够,反正都是找最短路,开不开方不影响距离大小的比较。
事实上改double很快的,分分钟改完而且不开方是错的。原因在于反向增广时会对距离进行求和,显然平方求和会降低短边的权重,增加长边的权重,导致找出来的最短路是错的。如
黑1
黑2 白1
白2
若第一次找最短路时(第一次肯定不会反向增广)找了白1连黑2。
若用平方,则发现交叉的情况距离短,因此会沿着错误的路径增广。