摘要: 这道题目有两种解法: 1.将每个点视为一个二元组(x,p),表示从起点到x有p条路径免费,相当于构建了一张分层图,N*k个节点,P*k条边。在这张图上用优先队列优化的SPFA算法求解,注意这里的d数组存的不是最短路径,而是路径中边权最大的值,最终答案就是min(d[n][j]),0<=j<=k 。 阅读全文
posted @ 2022-07-01 21:41 YHXo 阅读(39) 评论(0) 推荐(0)
摘要: 通过打懒标记实现区间取反,和线段树基本操作都差不多。 本题还是一道边权化为点权的问题。 200行巨长代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int 阅读全文
posted @ 2022-07-01 20:21 YHXo 阅读(38) 评论(0) 推荐(0)
摘要: 差不多是模板题,不过要注意将边权转化为点权,将边的权值赋给它所连的深度较大的点。 这样操作过后,注意查询ask()的代码有所改变(见代码注释) 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace 阅读全文
posted @ 2022-07-01 20:11 YHXo 阅读(37) 评论(0) 推荐(0)
摘要: 用树链剖分求LCA的模板; 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=40005; 5 int n,m; 6 int head[maxn],to[maxn<<1],w[maxn 阅读全文
posted @ 2022-07-01 18:32 YHXo 阅读(26) 评论(0) 推荐(0)