摘要: 题目链接 题目含义 建树,如果树里有环就输出YES,如果没有就输出最大直径 题目分析 可以用并查集来判断有没有环,如果当前是树,那么每个节点都在一个集合内 此时树内任意两个节点加上一条边都会成环 接下来的工作就是求最大直径了 这里我是用的DP法求直径,不知道两次DFS行不行 但要注意的是,全部的节点 阅读全文
posted @ 2019-07-30 22:35 helman78 阅读(171) 评论(0) 推荐(0)
摘要: 题目链接 题目含义 找出每台电脑距离最远电脑的长度 题目分析 对于节点v来说,如果最长长度在它的子树里,我们取dp[u][0] 否则,最长长度要经过它的父节点u,v的最长长度=dis(u,v)+u的最长长度 第一种情况,如果u的最长长度经过v这个子节点,那么很明显最长长度不可取,那我们就要去第二长长 阅读全文
posted @ 2019-07-30 22:15 helman78 阅读(106) 评论(0) 推荐(0)
摘要: 题目链接 题目含义 求树上两个点到第三个点重合路径的最大长度 题目分析 设三个点为A,B,C dis(A,B)=deep[a]+deep[b]-2*deep[lca(A,B)] 所以这是个求最近公共祖宗的题 那么答案可以由两种方法求 (1)若以C为第三个点,求( dis(a,c)+dis(b,c)- 阅读全文
posted @ 2019-07-30 21:44 helman78 阅读(210) 评论(0) 推荐(0)
摘要: 题目链接 题目含义 建树,求两个数的最近公共祖宗 题目分析 LCA入门模板题,还有一个树上倍增法不会 所以就只用Tarjan算法了 题目代码 阅读全文
posted @ 2019-07-30 19:08 helman78 阅读(127) 评论(0) 推荐(0)
摘要: 题目链接 题目含义 就是建一个树,让你求最大直径 下面用分别用DP和DFS的方法 题目代码 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; const int maxn=5e4+7; int n 阅读全文
posted @ 2019-07-30 18:33 helman78 阅读(130) 评论(0) 推荐(0)