标签:AC 2019.8 17 祖先 tarjan 距离 这道题 LCA 刷题
今天是连续打卡的第45天。
今天开始图论II的第一部分:LCA(最近公共祖先)
某些题目只有一组数据,这样不能判断程序是否正确,希望老师如果有时间再加3-5组数据。
第一题:1150
这道题是倍增LCA稍加变化形成的。可以知道,从结点x到结点y的距离一定是x与根距离-最近公共祖先与根距离+y与根距离-最近公共祖先与根距离。
只需要计算一遍LCA就完全可以解决这道题。
LCA的关键点在于:f[i][j]=f[f[i][j-1][j-1],即f[i]的2^j个祖先=f[i]的第2^j-1个祖先的第2^j-1个祖先。
LCA的查询即先跳到相同深度,再一起往上跳,最后x和y的父亲就是LCA。
AC代码:
第二题:1151
这道题其实和第一题一模一样,但是要求用tarjan算法。
tarjan算法原理比较复杂,可以看这篇博客,这里仅给出代码(其实是因为我描述不清楚)
AC代码:
标签:AC,2019.8,17,祖先,tarjan,距离,这道题,LCA,刷题 来源: https://www.cnblogs.com/wangximing/p/11369606.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。