题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3081
推荐博客:https://www.cnblogs.com/liuxin13/p/4728131.html
这个题目没什么思路,完全不知道怎么写,后来看了题解,说是网络流+二分+并查集,然后更加懵了。
然后就z继续看了详细解答,才知道怎么去写。
emmm...这个题目他是让你求不同男孩女孩全部都成功配对最多会有多少轮,每一轮的女孩配对的男生都不一样。
还有一个让题目复杂一点的就是女孩子有朋友,在一个女孩圈里,她朋友没吵过架的男生在下一轮里可以成为她的男朋友。
先不考虑女孩子有女孩圈里,也不求最多有多少轮,就是男生女生要全部成功配对,那就是一个网络流的裸题。
但是呢,现在要求最多有多少轮(不考虑女孩圈),那其实也很难想到二分。。。
不过有人提示你用二分了,这个就觉得二分可以做,而且感觉也特别对,那就这样写吧,至于解释就是一般求最值都要想到用二分,
而且这个还是可以找到单调性,这个单调性就是如果最大流==n*x(x是被二分枚举的答案)那就说明这个可以是答案,当然也可以更大一点,所以就更新这个l=mid+1
不然就是这个mid大了,所以这个r就更新为mid-1。
最后就是考虑有女孩圈了,既然有女孩圈,是一个圈,那就容易想到并查集,所以这个题目的第三个算法就是并查集,
但是这个并查集怎么用,我开始也不知道,后来看了一点点别人写的代码才理解的,这个就是把一个把一个圈子的女孩的所有男朋友都连到根节点上去。
这个样子,以后每一个女孩找男朋友都可以通过根节点去连线(建图)
大致思路就是这个样子的,接下来敲代码了。