生成树
文章平均质量分 76
s_h_r
这个作者很懒,什么都没留下…
展开
-
NEU 1132 Renew MST Quickly 增量最小生成树
增量最小生成树根据最小生成树的回路性质 首先求出任意两点间的最大权值 以后每加入一条边 都会产生一条回路 删除这条回路的最大权值即可#include #include #include #include using namespace std;const int maxn = 1000 + 10;struct Node{ int u, d; Node(原创 2015-05-28 21:07:38 · 960 阅读 · 1 评论 -
UVa 12275 Sensor network 生成树
题意:给你一个n个点m条边的无向图,每一条边都有一个权值,让你求出一个生成树,使得最大边减去最小边值最小。 思路:如果枚举每条边作为第一条边再求生成树,时间复杂度为O(m*m*logm),18S也不能接受,正确的思路是先求出最小生成树,然后在这个基础上加边,会形成一个环,然后删除这个环上的最小边,更新答案,这样的话时间复杂度会降到O(n*m)~~#include #inc原创 2015-09-07 21:48:30 · 870 阅读 · 0 评论 -
UVA 10816 Travel in Desert 最短路+Kruscal
题意:给你一个n个点m条边的无向图 每条边有一个长度和一个温度 问你找出一条从起点到终点 最大温度最小的路 如果存在多条 则输出距离最短的那一条思路:这道题目有两种方法 第一种就是二分温度跑最短路 我用的是第二种方法 即 先求出最小生成树 最低温度一定存在于最小生成树中 然后dfs找出起点到终点的最大温度 跑一边spfa 过滤掉温度大于该温度的边 记录前驱结点 最后输出即可 代码写的有点乱 -原创 2015-09-01 20:09:06 · 453 阅读 · 0 评论 -
UVa 1265 Tour Belt Kurscal 变型
题意:给你一个n个点m条边的无向图,让你求出所有的集合,其中这个集合内的所有边都要大于这个集合边界的边 输出所有符合的集合的元素和。 思路:其实就是按照Kruscal的思想,首先边从大到小排序,然后两个端点如果在同一集合则忽略,否则将这两个集合合并 然后判断这个集合内部的最小边是否大于集合边界的最大边,若大于则答案加上这个集合的元素个数,否则忽略。#include #in原创 2015-09-07 08:23:59 · 552 阅读 · 0 评论