C++算法题,图论问题,给定N个顶点及M条边,求能使所有顶点连通,且最大边与最小边之差最小
题目
C++算法题,图论问题,给定N个顶点及M条边,求能使所有顶点连通,且最大边与最小边之差最小
也就是这个
xxx国“山头乡”有n个村子,政府准备修建乡村公路,由于地形复杂,有些乡村之间可能无法修筑公路,因此政府经过仔细的考察,终于得到了所有可能的修路费用数据.并将其公布于众,广泛征求村民的修路意见.嗯,xxx国真是一个平等的国度.
政府考虑到费用问题,因此要求只能建n-1条公路,而且这n-1条公路还能连通n个村子,而且调查数据表明,这完全是可行的.
村民们展开了激烈的讨论,最后大家达成一致,要求每条路的费用要尽可能一样,这是基于“平等”的考虑,汗~
xxx国政府头脑简单,这这,太难了,最后双方又达成一致,那就保证费用最大的那条与费用最小的那条之间的费用之差尽可能最小吧.
现在的问题就交给你了,要你找出满足以上条件的一种方案,你只要输出费用最大的那条公路与费用最小的那条公路之间费用的差值w即可.嗯,因为这个数据还得告知村民,还是要“平等”.
答案
其实是叫你求一个生成树,使得这个生成树中最大边和最小边的差值尽可能小.
算法只需要改变一下一般的最小生成树算法就行,kruscal原本是取最小边开始构建生成树,现在需要逐个枚举最小的边来构建一堆生成树,找出最优的那种.
也许你可以参考这个文章:
举一反三
已知函数f(x)=x,g(x)=alnx,a∈R.若曲线y=f(x)与曲线y=g(x)相交,且在交点处有相同的切线,求a的值和该切线方程.
我想写一篇关于奥巴马的演讲的文章,写哪一篇好呢?为什么好
最新试题
热门考点