csp
栩栩如枫
这个作者很懒,什么都没留下…
展开
-
CSP第十二次认证 行车路线 拆点
这道题的关键是如何解决连续小路的情况,因为题目保证答案不超过1e6,说明小路的连续长度不超过1000,给了我们提示,可以将点拆分为两个属性,一个是点的序号,另一个则是最后一段连续小路的长度,所以我们的dist数组dist[i][j]可以表示,从第1个点开始到第i个点,最后一段连续小路的长度为j的疲劳值,这样的话我们就可以同时记录两个我们所需要的值。ps:dijkstra算法中需要的st判重数组也要拆成两个。 每次更新dist数组需要考虑大路小路两种情况(如...原创 2022-05-11 17:23:48 · 395 阅读 · 0 评论 -
CSP第九次认证-3 权限查询
详细注释都在代码里了代码中相关的知识:#include <iostream>#include <string>#include <algorithm>#include <set>#include <unordered_map>//本道题三种关系依次嵌套,在想好如何存储之后便可以开始写了//省略了person中role的存储,在读入中将role转化为对应的权限,所以person里存的也是权限using namespac原创 2022-05-05 16:47:01 · 125 阅读 · 0 评论 -
CSP网络延时--2次dfs
类似于树的直径的模板题,通常解决这类问题用树形dp(一次dfs)或者2次dfs来解决,这里我用的是2次dfs。时间复杂度是O(n),但该方法不能用于带有负边的图 第一次dfs任选一点u,本题里选的“1”这个点,求距离1最远的点v,第二次dfs求v到距离v最远的点的距离,这个距离便是树的直径即为传递信花费的最长时间。 #include<iostream>#include<algorithm>#include<...原创 2022-04-20 16:23:27 · 209 阅读 · 0 评论