当前位置: 首页 > wzjs >正文

网站开发前端设计旅游seo

网站开发前端设计,旅游seo,手机网站建设过程,网站开发作用310. 最小高度树 - 力扣(LeetCode) 分析:n个顶点的无环无向连通图,有n-1条边。 1)任意两点有且只有一条路径 2)路径最远的两顶点必为叶子节点 且根据证明可以得出以下两个性质: 1.最小高度树的根…

310. 最小高度树 - 力扣(LeetCode)

分析:n个顶点的无环无向连通图,有n-1条边。

1)任意两点有且只有一条路径

2)路径最远的两顶点必为叶子节点

且根据证明可以得出以下两个性质:

1.最小高度树的根会出现在最长路径的中点处,即最小高度:h=upper(maxdist/2)

2.最小高度树的根一定经过最长路径

设 x,y 为两个路径最远的两个顶点,记作:dist[x][y],maxdist=dist[x][y]

证明1:

反证法,设h<upper(maxdist/2)(即 h<=upper(dist[x][y]/2)-1,因为距离的增长是散点的), 顶点 z 为最小高度树的根

1)z 经过 x,y 

dist[x][z] <= h,dist[z][y] <= h(dist[x][y]为偶数时相等,为奇数:一个相等,另一差1)

dist[x][y]  = dist[x][z] + dist[z][y] <= 2*h <= 2*upper(dist[x]/[y]/2) - 2 

当dist[x][y]为奇数时,2*upper(dist[x]/[y]/2) - 2 = dist[x][y] - 1 < dist[x][y],矛盾

当dist[x][y]为偶数时,2*upper(dist[x]/[y]/2) - 2 = dist[x][y] - 2 < dist[x][y],矛盾

2)z 不经过 x,y

z ... ... a ... ... x , z ... ... a ... ... y

因为 x,y 必为叶子节点,那么它们必有公共的祖先,根据最开始的分析,任意两点有且只有一条路径,那么 z 到 x 和 z 到 y 必定经过了至少一个顶点,设这个顶点为 a。

dist[z][x] = dist[z][a] + dist[a][x] <=h

dist[z][y] = dist[z][a] + dist[a][y] <=h (同(1)分析)

注:dist[z][a]>=1,因为是散点的,且 z 不经过 x,y

dist[x][y] = dist[x][a] + dist[a][y] = dist[a][x](无向图,且路径唯一) + dist[a][y]

                = dist[z][x] + dist[z][y] - 2*dist[z][a] <= 2*h - 2*dist[z][a]
                < 2*upper(dist[x][y]/2) - 2*dist[z][a] < dist[x][y]

dist[x][y]为奇数,2*upper(dist[x]/[y]/2) - 2*dist[z][a] <= dist[x][y] - 1 < dist[x][y],矛盾

dist[x][y]为偶数,2*upper(dist[x]/[y]/2) - 2*dist[z][a] <= dist[x][y] - 2 < dist[x][y],矛盾

因此,h=upper(dist[x][y]/2)

证明2:

假设 z 不经过 x,y,其实就转化成了证明1的第二种情况了。

dist[x][y] = dist[x][a] + dist[a][y] = dist[a][x](无向图,且路径唯一) + dist[a][y]

                = dist[z][x] + dist[z][y] - 2*dist[z][a] <= 2*h - 2*dist[z][a]
                = 2*upper(dist[x][y]/2) - 2*dist[z][a] < dist[x][y]

核心变化就是 h=upper(dist[x][y]/2),2*h - 2*dist[z][a] = 2*upper(dist[x][y]/2) - 2*dist[z][a] < dist[x][y],由原来的<=改成了等于,但还是小于dist[x][y],矛盾的。

因此,最小高度树的根必定经过最长路径的两顶点。

代码实现实现思路:

        由于无环无向连通图比较稀疏,且用不到权值位,只是要表示点和点之间的连接关系,为了效率,节省空间以及方便释放资源角度考虑,采用动态二维数组实现的邻接表matrix_list,matrix_list[x][y]位置存放终点下标。

        采用广度优先遍历,定义数组pPath,将记录每个顶点的父路径,且遍历时以传参顶点为根进行遍历,将该顶点的父路径置为-1,还要记录下最外层的节点,这就是相对于当前节点最远的节点。

        获取两次最远节点,第一次以下标0顶点为根获取,第二次以第一次获取的结果为根获取,再根据pPath记录的父路径迭代确定高度,若高度为奇数,那么有两个根都为最小高度树,若高度为偶数,那么只有一个根为最小高度树。

代码实现如下:

class Solution {
public:int getLongestIndex(const int vi, const vector<vector<int>>& matrix_list,vector<int>& pPath) {queue<int> q;vector<bool> visited(matrix_list.size(), false);q.push(vi);int index = -1;while (!q.empty()) {int curi = q.front();q.pop();index = curi;visited[curi] = true;for (int i = 0; i < matrix_list[curi].size(); i++) {if (visited[matrix_list[curi][i]] == false) {q.push(matrix_list[curi][i]);pPath[matrix_list[curi][i]] = curi;}}}pPath[vi] = -1;return index;}vector<int> findMinHeightTrees(int n, vector<vector<int>>& edges) {vector<vector<int>> matrix_list(n, vector<int>());for (size_t i = 0; i < edges.size(); i++) {matrix_list[edges[i][0]].emplace_back(edges[i][1]);matrix_list[edges[i][1]].emplace_back(edges[i][0]);}vector<int> pPath(n, -1);int x = getLongestIndex(0, matrix_list, pPath);int y = getLongestIndex(x, matrix_list, pPath);vector<int> longestPath;while (pPath[y] != -1) {longestPath.emplace_back(y);y = pPath[y];}//边数int length = longestPath.size();//点数longestPath.emplace_back(y);if(length%2==1){return {longestPath[length>>1],longestPath[(length>>1)+1]};}elsereturn {longestPath[length>>1]};}
};

http://www.dtcms.com/wzjs/831514.html

相关文章:

  • 网站子站怎么做的公司请做网站
  • 犀牛云做的网站好不好盐城个人网站建设
  • 深圳网站建设微信开发看起来很高级的网页排版
  • 国内网站需要备案网站建设公司需要什么
  • 专业网站建设网页推广住建部官网查询
  • 宁波网站建设设计安装wordpress
  • 教育网站建设解决方案宁波建设网站哪家好
  • 备案网站宁波企业网制作公司有哪些
  • 爱站seo综合查询湛江市城乡住房建设局网站
  • 创意网站建设排行榜目前还有阳性患者吗最新消息
  • 唐山的做网站的企业广告策划方案万能模板
  • 响应式网站模板是什么原因缪斯形象设计高级定制
  • 苏州建设局网站实名制佛山中小企业网站制作
  • 南昌餐厅网站建设如何生成网址链接
  • 音乐资源网站开发好看响应式网站模板下载
  • 能先做网站再绑定域名吗wordpress4.9火车头发布模板
  • 上虞区驿亭镇新农村建设网站海外销售是做什么的
  • 网站建设公司应该怎么做推广投资公司经营范围
  • 信阳做网站推广信阳网站建设做视频网站版权怎么解决
  • 凡科网电脑版怎么做网站建站时长是什么原因造成的
  • 网站开发公司交易流程徐州关键词优化如何
  • 百度网站的主要盈利来源不包括云南建筑培训网
  • 手机网站模版重庆短视频seo优化推荐
  • 大连专业模板网站制作wordpress运维
  • 网站托管运营所需资料wordpress主题注册验证码
  • 个人网站吗wordpress多说插件
  • 哪里做网站wordpress淘客程序
  • 郑州优化网站推广无锡做网络推广
  • 电子商务网站进度的基本流程网络项目设计方案
  • 怎么上传网站地图室内设计平面图上色