摘要: 题目链接 题目含义 欧拉欧拉欧拉欧拉欧拉欧拉欧拉 题目分析 只要满足每个节点度数是偶数,并且每个点都连通,那么就一定有欧拉回路 度数在加边就能记录,而连通性用一个并查集就行了 相比其他图论,这真的最简单的了 题目代码 阅读全文
posted @ 2019-08-01 19:21 helman78 阅读(172) 评论(0) 推荐(0)
摘要: 题目链接 题目含义 给出一堆区间,要求一个集合V与这些区间都共同含有两个以上不同的整数 题目分析 用sum[x]来表示[0,x]内包含V集合整数的个数 那么区间[a,b]则说明sum[b]-sum[a-1]>=2 在求最长路 if (dis[v]<dis[u]+w) dis[v]=dis[u]+w; 阅读全文
posted @ 2019-07-31 22:14 helman78 阅读(107) 评论(0) 推荐(0)
摘要: 题目链接 题目含义 在一个图上,要从点s到点t,最多可以省去k条路的花费,问最少花费 题目分析 如果不看省去k条路花费的话,就是一个求最短路 考虑k条路花费的话,就是一个分层图 建立二维数组dis[maxn][k+1],具体的细节其实和求最短差不多 当然省去花费的路越多,花费越少,最后输出dis[t 阅读全文
posted @ 2019-07-31 20:13 helman78 阅读(158) 评论(0) 推荐(0)
摘要: 题目链接 题目含义 一个人想去朋友家,最短路不走,想走次短路,而且长度严格小于最短路 题目分析 次短路的模板题,还是挺简单的 但是与求最短路不同 Dijstra算法里此时队列中dis最小的点的dis即是它的最短路,就将它出队处理接下来的点就行了 而求次短路时,如果这个点像求最短路一样出队的话,万一这 阅读全文
posted @ 2019-07-31 19:56 helman78 阅读(471) 评论(0) 推荐(0)
摘要: 题目链接 今天集训学长没有给负环的题,所以一下子全都用Dijkstra做了,SPFA都没练习到,所以专门把这道不卡SPFA的题拿来练练 题目含义 求1到其他点的最短距离之和,加上其他点到1的最短距离之和 题目分析 求1到其他点的最短距离之和,也就是单源最短路径,Dijkstra和SPFA应该都行 而 阅读全文
posted @ 2019-07-31 19:04 helman78 阅读(158) 评论(0) 推荐(0)
摘要: 题目链接 题目含义 建树,如果树里有环就输出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)