边权最大差最小的生成树
最小生成树十分简单,想求最大边权最小的一个数。我们利用树的性质和单调性,维护所有节点的父节点(刚开始的时候弄成自己)和一个当前用于建树的边数sum。先sort把所有边按边权从小到大排序,然后向后遍历,如果这条边的两端点最大的父亲不一样就令他们合并,并且sum++。当sum==n-1时停下来,答案就是此时的边权。
现在要求边权最大差最小的生成树,对小数据版就可以随便搞:先跑一遍最小生成树,如果停下来时sum!=n-1说明用所有的边也无法使n个点在同一个树上,输出-1。如果等于了n-1,那么此时的边权减最小的边权是一个可行解。再从小到大枚举最小边,以第i个边为最小边到达第f条边sum==n-1停下来,更新答案,ans=min(ans,o[f].v-o[i].v);如果到最后也无法构造出树就可以return 0了。
然而这是小数据,大数据肯定支持不了。
我发现改变最小边时中间无数的边被拆下来又接回去,浪费了大量时间。
然而我还是不会,您们加油。