题意
给你\(2 \times n\)个点分成了\(A\)和\(B\)两个部分,其中\(A\)和\(B\)中都有\(n\)个点,开始的时候有一些边连接了\(A\)中的一些点和\(B\)中的一些点,你每一次可以加一条边,这条边的两端分别是\(A\)和\(B\)中的一个点,并且\(A\)与\(B\)之前并不直接相连,现在想让你求出最少要加几条边,才能满足
1.任意从\(A\)中和\(B\)中选择一对点,这个点对互相之间是联通的
2.任意从\(A\)中和\(B\)中选择一对点,这个点对之间的最长路严格大于\(n\)
分析
首先考虑\(m=0\),也就是只给你\(2n\)个点的时候应该怎么构造连边方案,我们发现我们要满足这\(2n\)个点之间相互联通,那么最少要连接\(2 \times n - 1\)条边,也就是连成一棵树,但是我们还要满足任意点对之间的最长路大于\(n\),因为我们发现我们只能在两个集合之间连边,那么如果只连成一棵树,那么必定存在一条边的两端,这条边两端的点的最长路为\(1\),所以要考虑再加边. 我们发现对于这条边的两个端点,如果他们两个点到各自不经过这条边能到达的最远点之间能连接一条边,那么这两个点之间的最长路就会从\(1\)变得尽可能长,而且这两个最远点连边之后必然会形成一个环,我们发现在形成一个环之后,如果有不在环上的点,那么必然会造成路径距离的浪费,所以最优情况就是所有的\(2n\)个点都在环上.那么这\(2n\)个点,我们任选一对点,这一对点之间会有两条路径,我们记路径长度为别为\(a\)和\(b\),那么一定会有\(a+b=2n\),边数为\(2n-1\),那么最长路一定大于\(n\)。
然后考虑\(m \not= 0\)的情况,发现保证没有重边和自环的情况,那么就相当于在\(m=0\)的情况时提前给你连好了几条边,我们只需要维护度数小于\(2\)的点然后考虑怎么连边即可.
心得
构造题还是一直不知道怎么分析,感觉看的太整体了也不是很好,这道题就要从\(m=0\)的特例开始想起然后才能发现这道构造题所需要的性质,其实还是自己做题做少了呜呜