MST
文章平均质量分 75
wnjason
这个作者很懒,什么都没留下…
展开
-
HDOJ 1863
题目大意:输入N,M表示道路的数目,和村庄的数目,接下来输入N行,每行输入一条道路的起始端点,终止端点,道路权值,输出所有村庄联通的最小代价,若是没有最小代价则输出“?”,测试用例的输入以N=0为结束标志。 算法思想: 1.定义一个结构体Edge用于存储道路的两个端点及权值。 2.扫描所有的边,按从递增的顺序进行排序。 3.采用克鲁斯卡尔算法构造最小生成树。(克鲁斯卡尔算法原创 2014-11-25 19:33:52 · 432 阅读 · 0 评论 -
HDOJ 1233
题目大意:输入N表示乡村数目,接下来输入(N*(N-1))/2条道路,求出所有乡村连通的最小代价。 算法思想: 依旧是最小生成树,库鲁斯卡尔。 参见:点击打开链接 代码如下: #include #include #include using namespace std; const int MAXN=10000; typedef struct edge{ int sta原创 2014-11-25 20:57:01 · 401 阅读 · 0 评论 -
HDOJ 1879
题目大意: 输入一个N,表示村庄的数目,接下来输入N*(N-1)/2行,每行输入4个数,分别表示每条道路的起始端点,终止端点,花费代价,修成状态。求出是所有村庄连通的最小代价。 算法思想: 依旧采用克鲁斯卡尔算法,但是求解问题时需要注意道路的修成状态,如果状态为1则在用克鲁斯卡尔算法之前就该把这条边加入集合A中,或者修改该条道路的代价为0,然后在求解该问题。解原创 2014-11-26 12:44:14 · 452 阅读 · 0 评论 -
HDOJ 1102
题目大意: 输入N表示现存在的村庄数目,接下来输入N*N规模的邻接矩阵来表示村庄间道路的信息,之后输入Q表示目前已存在的道路数目,随着输入Q条已存在的道路。求出使得所有村庄畅通的最.小代价。 算法思想: 1.新建一个邻接矩阵存储图的信息。 2.接着,将已经存在的道路的代价置为0,因为这样使得在最小生成树中对已存在的道路不产生代价。 3.用一个Edge的原创 2014-11-26 20:57:45 · 875 阅读 · 0 评论 -
HDOJ 1875 畅通工程再续---最小生成树问题
题目大意:首先输入T,表示测试用例数,之后输入C表示千岛湖中小岛的数目,接着输入每个小岛的位置坐标,根据已知条件计算出使得所有小岛畅通,且代价最小。每公里的修桥造价是100.注意,要求任意小岛之间的距离必须在[10,1000]之内,如果不能使得所有小岛畅通输出"oh!" 算法思想: 1.按照题意输入小岛的数目和坐标 2.计算出每个小岛间的欧几里得距离,并且过滤原创 2014-11-27 20:47:11 · 429 阅读 · 0 评论 -
HDOJ 1301
题目大意: 输入一个数n表示岛上的村庄数,接下来输入n-1行,每行先输入一个乡村名称,接下来输入与其邻接的乡村数,之后输入没给邻接的乡村及道路权值,以此类推共n-1行,最后题目要求输出该联通图的最小生成树的最小代价。 算法思想: 1.先建立一个邻接表,用来存储连通图。 2.从邻接表中读出,联通图的所有边。 3.将读出的边进行排序。原创 2014-11-25 16:04:46 · 732 阅读 · 0 评论 -
HDOJ 2988 -------最小生成树
题目大意:输入 m,n 表示路口,道路的数目,求出是所有路口畅通时政府所省的最大费用。 算法思想: 边输入便求和,计算出政府花费的总代价,然后用克鲁斯卡尔算法求出最小生成树,同时计算出最小代价,最后用总代价-最小代价,就OK了。 克鲁斯卡尔算法模板: 克鲁斯卡尔算法 代码如下:#include #include #include #include #include usin原创 2014-12-15 22:11:34 · 355 阅读 · 0 评论