摘要: 魔法森林 "题目传送门" 解题思路 把每条路按照$a$的值从小到大排序。然后用LCT按照b的值维护最小生成树,将边按照顺序放入。如果$1$到$n$有了一条路径,就更新最小答案。这个过程就相当于枚举了每一个$a$作为最大的$a$,然后求出了其对应的最小$b$的最大值。 代码如下 阅读全文
posted @ 2019-08-24 15:47 whisperlzw 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 【模板】最小生成树 "题目传送门" 解题思路 用LCT来维护最小生成树。 除了把各顶点作为节点外,每条边也都视为一个节点。对于要加入的边$e$,检查其两顶点$x$和$y$是否在同一棵树中,如果不在,则让$e$连接$x$和$y$如果在一棵树中,则找到$x$到$y$的路径上最长的边,与$e$比较,如果$ 阅读全文
posted @ 2019-08-24 15:14 whisperlzw 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 【模板】Link Cut Tree (动态树) "题目传送门" 解题思路 妈妈我终于学会LCT了。 代码如下 cpp include using namespace std; const int N = 300005; int v[N], fa[N], ch[N][2], sum[N]; bool 阅读全文
posted @ 2019-08-24 11:40 whisperlzw 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 数字计数 "题目传送门" 解题思路 用$dp[i][j][k]$来表示长度为$i$且以$j$为开头的数里$k$出现的次数。 则转移方程式为:$dp[i][j][k] += \sum_{t=0}^{9} dp[i 1][t][k]$,即在每个数前面放一个$j$,但是对于放在前面的这个$j$我们还没有计 阅读全文
posted @ 2019-08-24 11:35 whisperlzw 阅读(151) 评论(0) 推荐(0) 编辑
摘要: path "题目传送门" 解题思路 先用vector存图,然后将每个vector按照边的权值从小到大排序。将每个顶点作为起点的边里最短的边存入优先队列。对于存入优先队列的信息,应有边起点,终点,是其起点的第几短边,以及路径总长度。优先队列按照路径长度从小到大排序,每次出队当前最短的路径,对于一条路径 阅读全文
posted @ 2019-08-24 11:00 whisperlzw 阅读(213) 评论(0) 推荐(0) 编辑
摘要: array "题目传送门" 解题思路 操作1是把第pos个位置上的数加上$10^7$,操作2是找到区间\[1,r]中没有且大于k的最小的数。注意到k的范围是小于等于n的,且n的范围是$10^5$,远小于$10^7$,所以对于操作1,可以视为把第pos个位置上的数删去。 因为所有节点上的数都是唯一的, 阅读全文
posted @ 2019-08-24 10:40 whisperlzw 阅读(125) 评论(0) 推荐(0) 编辑