Processing math: 100%

随笔分类 -  图论

摘要:两种写法,主要是复杂度的证明上比较有趣 1. 并查集+BFS 对于每个点,最多只会进入队列一次,这部分的复杂度是O(n) 每个点最多会在 for (int i = find(1); i <= n; i = find(i + 1))这段话中被访问 edge[i].size()+1 次,因为 阅读全文
posted @ 2021-06-25 21:53 cminus 阅读(31) 评论(0) 推荐(0) 编辑
摘要:看到题目的时候就感觉是一个费用流 但是怎么想都想不出来怎么做(太菜了) 最大的问题大概是我把这个网格看成了若干个点,而没有思考它们在行列上的关系 对于两个R限制,每次一定有一个限制是基于前一个限制的,例如R 1 10和R 3 5,3>1,所以3行及之后的点一定是先满足前一个条件,再满足这一个条件,基 阅读全文
posted @ 2021-05-20 16:33 cminus 阅读(131) 评论(0) 推荐(0) 编辑
摘要:可以发现可以构建出的是一棵树,且树的深度在20层及以内 刚开始想对于每条路径跑最短路,然后都跑一边得出答案,但是发现因为路径可以重叠,所以后面求的路径会修改一些公共路径的最短路,所以不能这么求 考虑什么是不变的,一个点到自己的最短路一定是0,所以从每个点出发,跑它到所有子节点的最短路,这个路一定是这 阅读全文
posted @ 2021-05-10 17:00 cminus 阅读(555) 评论(0) 推荐(0) 编辑
摘要:我到底是多菜才能这道题都做不出来啊 似乎是t神几分钟就写出来的题目 这道题的重点在于求长度为k的最短路,我的误区在于我一直想用各种最短路算法来解决,但是完全不需要 显然这种限制具体步数的问题可以用DP或者说是分层图来解决,当然从本质上来说分层图就是一种DP,考虑dp[k][i][j]表示从(i, j 阅读全文
posted @ 2021-05-07 21:20 cminus 阅读(27) 评论(0) 推荐(0) 编辑
摘要:想清楚它不是DP而是贪心就好做了 首先, 我们称子树刚好包含所有某一颜色的点为临界点, 那我们要优先选择深度越深的临界点越好 用另一种方式来说, 在dfs的过程中, 第一次发现有一个点恰好为临界点,那么就选择这个点为分界线新增一个答案, 很容易想清楚, 选择越深的肯定更优, 让其它点的有更多分块的机 阅读全文
posted @ 2021-03-08 20:06 cminus 阅读(151) 评论(0) 推荐(0) 编辑
摘要:整出来了七道题,ABC最后都没做赛后补的 A题我和题解以及大部分人思路都不一样,并没有用到树状数组,我甚至看到有笛卡尔树做的(并不会),我是用了两次单调栈,维护两边最远的位置,再算贡献,然后这样写好像是代码长度最短的,应该是最简单的方法吧,但是这么写细节上也有很多坑,比如最小值不在区间内,在端点上时 阅读全文
posted @ 2021-02-13 16:50 cminus 阅读(71) 评论(0) 推荐(0) 编辑

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