上一页 1 ··· 30 31 32 33 34 35 36 37 38 ··· 68 下一页
摘要: 比赛的时候根据数据范围马上猜出了是通过轻重点分块,但是在维护set的时候犯了一个nt错误 选择了插入邻边的权值去判断第一个未出现的答案,怎么想都觉得复杂度很高。 其实可以选择先插入所有得可能答案,然后对邻边影响得答案进行删除,这样set中得第一个元素就是答案。 这题复杂度保证得原因是,通过分块,对于 阅读全文
posted @ 2020-07-22 22:25 朝暮不思 阅读(425) 评论(4) 推荐(0) 编辑
摘要: 通过领悟题意,发现本题只与关键点和他们的lca有关,因此把只需要对他们建虚树 对于dp思路,如果x不是关键点,那么观察子树中有多少需要断开的,如果超过1,那么直接断开这个点,如果等于1,先保留看看能否与后面的一起。 如果是关键点,那就必须要把当前点和子树中的所有关键点断开,首先我们知道一定存在合法方 阅读全文
posted @ 2020-07-22 20:32 朝暮不思 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 虚树对于多次询问的时候有这优化复杂度的好处,其原理就是只保留有用节点和必须保留的有用节点的lca 先求一遍dfs序后,用栈模拟操作,根据lca是否在栈中确定是否要将lca加入栈,因为重构了树,因此原来的边的信息需要进行更换 对于本题,新的边其实就是路径上的边权的最小值,这是因为随便切掉一个边就能把他 阅读全文
posted @ 2020-07-22 14:45 朝暮不思 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 对于这道题,可以想想对于每个b[i],a[i]中可选的位置的区间在哪,这样只要找到区间,就能知道当前可以选那几个位置断开 b[1]的开头肯定是1号位,而我们发现如果对后缀求一下后缀的最小值,这样就天然满足题目条件,我们用一个map存一下答案,就能知道b[i]是最小值的区间是哪些 因为b是单调递增的数 阅读全文
posted @ 2020-07-21 23:31 朝暮不思 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 这道题需要将它抽象成图论问题,我们用二维数组f表示走到第i个关键点,绿灯还剩j秒的最小回合数,也就是一轮红绿灯 这样这个问题被抽象成了最短路的问题,因为对于同一个点来说,第一次到达某个状态肯定是最小的,因此能找到最小回合数 这道题还有一个优化是本题的边权是01的,因此可以用双端队列优化一个log # 阅读全文
posted @ 2020-07-21 10:00 朝暮不思 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 同样是找dfs树,这题如果本身就是树,那么直接奇偶找大的遍历 如果是图,建立dfs树,如果全部的环都是>=k的,这样只需要找到一个环,之后隔着输出就是答案,因为这样总是能找到(k+1)/2 不然的话直接把环输出就行 #include<bits/stdc++.h> using namespace st 阅读全文
posted @ 2020-07-19 23:14 朝暮不思 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 对于图建立dfs树,这样只存在树边和B边,不会存在横叉边,这也是tarjan算法的思想 建立dfs树后,我们发现任意一条B边都会生成一个环,且所有b边就是所有环 我们进行dfs栈的建立,找到如果存在满足条件的环,那就直接输出 如果不存在,我们证明肯定存在满足条件的独立集。因为根据鸽巢定理,每个点一定 阅读全文
posted @ 2020-07-19 21:41 朝暮不思 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 用list维护每个节点能往外的信息,list有一个splice函数可以在list后面合并新的list,这样操作方便,之后其实就是暴力并查集+bfs,注意去重。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typ 阅读全文
posted @ 2020-07-19 10:19 朝暮不思 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 跑ac自动机后使用fail树建立dfs序后跑树状数组维护答案 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e6+10; struct node{ int cnt; node * nxt 阅读全文
posted @ 2020-07-18 23:10 朝暮不思 阅读(156) 评论(0) 推荐(0) 编辑
摘要: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=5e5+10; struct node{ int cnt; node * nxt[27]; node * fail; vector<node 阅读全文
posted @ 2020-07-17 22:49 朝暮不思 阅读(128) 评论(0) 推荐(0) 编辑
上一页 1 ··· 30 31 32 33 34 35 36 37 38 ··· 68 下一页