随笔分类 -  图论

摘要:1001 Battle Over Cities - Hard Version 思路:暴力跑每一个点作为被侵略点的情况,求最小生成树即可。 需要注意的情况是,虽然题目说最一开始的时候图是联通的,但是要注意,当一个点被侵略的时候,图可能就不连通了,所以需要判定一下,不连通的情况置为 inf。 // Cr 阅读全文
posted @ 2021-05-18 16:07 caoanda 阅读(121) 评论(0) 推荐(0) 编辑
摘要:D. Explorer Space 一点一点把题目理顺。看看哪些是可以推断出来的。 对于 dp 的题目而言,要一点一点去分析其中什么东西是可以递推的,正如这道题中 dp[x][y][k]=min{dp[xx][yy][k1]+d[x][y][i]} 然后再进行记忆化搜索即可。 // C 阅读全文
posted @ 2021-04-25 23:24 caoanda 阅读(123) 评论(0) 推荐(0) 编辑
摘要:D - Returning Home 参考:D:Returning Home-Codeforces Round #675 (Div. 2) 最短路的题难点在于建图,这道题的图不是特别难建 思路:对于每一个点,分别与 x 轴和 y 轴上相邻的两个点,连边,然后起点与每一个点连边即可。 //Create 阅读全文
posted @ 2020-12-11 14:39 caoanda 阅读(163) 评论(0) 推荐(0) 编辑
摘要:How far away ? 预处理出每一个节点到根节点的距离即可,两个节点之间的距离为len[x]+len[y]-2*len[lca(x,y)] // Created by CAD #include <bits/stdc++.h> #define fi first #define se secon 阅读全文
posted @ 2020-08-08 10:40 caoanda 阅读(186) 评论(0) 推荐(0) 编辑
摘要:Watchcow 从任意一个节点开始,求一个欧拉回路即可。 // Created by CAD #include <iostream> #include <vector> #include <map> #define pii pair<int,int> #define fi first #defin 阅读全文
posted @ 2020-07-24 21:50 caoanda 阅读(134) 评论(0) 推荐(0) 编辑
摘要:G. Operating on a Graph 这道题需要注意的点是,合并的时候需要用链表O(1)进行合并或者用 vector 启发式合并,这样才不至于复杂度过大,另外,去重的时候,如果用哈希 map 会导致超时,而用 map 则不会 // Created by CAD #include <bi 阅读全文
posted @ 2020-07-19 23:44 caoanda 阅读(145) 评论(0) 推荐(0) 编辑
摘要:I. 1 or 2 依次遍历所有的点,对于遍历的当前点,选择所需的边,直到度数饱和。当遍历点的序号 大于n时,则证明该解法时是可行的。 但是要注意的时候,遍历之前需要将节点按照邻接表的大小进行排序,这样时间复杂度会低一点。 解法也算是暴力吧,只不过优化了一下。 // Created by CAD o 阅读全文
posted @ 2020-07-14 16:15 caoanda 阅读(378) 评论(0) 推荐(0) 编辑
摘要:Cover the Tree 就当作是一个结论吧…当要用链覆盖所有的边时,对叶子节点根据dfs序排序后,根据(i,i+s/2)的配对规则进行配对即可,如果有奇数个叶子节点,则将其与根节点相连。 // Created by CAD on 2020/7/13. #include <bits/stdc 阅读全文
posted @ 2020-07-13 20:58 caoanda 阅读(158) 评论(0) 推荐(0) 编辑
摘要:"C Linova and Kingdom" 参考: "Codeforces Round 635 Editorial" 首先要知道的规律是如果一个城市为工业城市,那么它的所有子节点也肯定为工业城市。可以通过反证法证明。 那么我们可以得到每一个旅游城市的贡献为(子树大小 结点深度),证明方法可以查看官 阅读全文
posted @ 2020-04-17 14:45 caoanda 阅读(404) 评论(0) 推荐(0) 编辑
摘要:"D Edge Weight Assignment" 参考: "Codeforces Round 633 Editorial " 感觉这个题关键之处在于,要会将图化为一棵树,这样逻辑会清晰很多。 如果叶子之间距离存在有奇数(非1),那么最小的 f 值一定为3,否则为1。可以通过求解其他叶子节点到某一 阅读全文
posted @ 2020-04-13 22:05 caoanda 阅读(257) 评论(0) 推荐(0) 编辑
摘要:"D Minimum Euler Cycle" 首先最重要的是构造规则:当n=5(12131415(232425(3435(45())))1) 赛时需要想到,如果发现一个东西构造起来很麻烦的话,那么有很大几率是自己的思路错了 阅读全文
posted @ 2020-04-12 21:22 caoanda 阅读(203) 评论(0) 推荐(0) 编辑
摘要:"D Navigation System" 参考: "Codeforces Round 625 (Div. 1, based on Technocup 2020 Final Round).B. Navigation System" 在遍历这个点A的时候,其实是判断下一个点B是否需要重新规划路径,如果 阅读全文
posted @ 2020-03-02 20:36 caoanda 阅读(222) 评论(0) 推荐(0) 编辑
摘要:"最短Hamilton路径" 利用动态规划可以很好地解决这个问题。 dp[i][j]中 i 利用状态压缩,可以表示已经走过了多少个点,j 表示的是当前所在点。 阅读全文
posted @ 2020-02-26 14:10 caoanda 阅读(142) 评论(0) 推荐(0) 编辑
摘要:图中长度为k的路径的计数 Gk1+k2[u][v]=w=1nGk1[u][w]Gk2[w][v] 经过变形,Gk1+k2=w=1nGk1Gk2 所以Gk=G1k 阅读全文
posted @ 2020-02-21 22:58 caoanda 阅读(237) 评论(0) 推荐(0) 编辑
摘要:"F Berland Beauty" 因为这道题的 n 只有5000的范围,所以直接暴力用O(n2)的写法也是可以的,只需要先 dfs 一遍,把每一条边都赋为其可能达到的最大值,然后再把所有的数据再 check 一遍即可。当然这道题也可以用树链剖分来进行优化。 阅读全文
posted @ 2020-02-07 19:12 caoanda 阅读(183) 评论(0) 推荐(0) 编辑
摘要:"Conscription" 如果两个人之间有关系,且动用了这一段关系,那么我们就把这两个人连起来,很明显最后得到的肯定是一个无环图,而最后的答案就是 ,要使 ans 最小,那么就要使图中总的权值最大,那么只需要根据已知边求一个最大生成树即可。 代码: 阅读全文
posted @ 2020-01-19 16:02 caoanda 阅读(320) 评论(0) 推荐(0) 编辑
摘要:"Jelly" 在遍历一张地图,求最短路径的时候,最简便的方法就是用 来写 代码: 阅读全文
posted @ 2020-01-19 10:14 caoanda 阅读(306) 评论(0) 推荐(0) 编辑
摘要:"Roadblocks" 该题的难点在于求次短路,而次短路的求法与最短路基本一致,更新的方式就是当当前权重比最短路大且比次短路小的时候就更新它,如果它比最短路小,那么就把它和最短路交换一下 关键代码: 代码: 阅读全文
posted @ 2020-01-18 17:53 caoanda 阅读(295) 评论(0) 推荐(0) 编辑
摘要:路径还原 例如在求解最短路等等问题时,只需用一个 数组在更新我们要求的数据时,记录一下前驱顶点即可 阅读全文
posted @ 2020-01-18 09:11 caoanda 阅读(307) 评论(0) 推荐(0) 编辑
摘要:Bellman Ford BF算法求的是单源最短路问题,即每一个点到起点 的最短距离。 算法的思想在于d[i]=min(d[i],d[j]+e(j,i)) 表示点 到`s d[i]`不断进行更新,知道不能更新为止,复杂度为O(nm) 代码: 如果不存在负圈则 的循环是有限的,最多只执行 次, 阅读全文
posted @ 2020-01-17 10:16 caoanda 阅读(131) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示