摘要: 题意:数量为N的序列,给定M个区间,要求对每个区间Li,Ri,都有al..r (l≤i<j≤r), ai≠aj。构造这个序列使其字典序最小。 分析:如果对于每个所给区间都暴力扫一遍,1e5的数据量肯定会TLE。其实有一些区间被其他区间完全覆盖,那么在处理其他区间的过程中,该区间已经被处理过了。用一个 阅读全文
posted @ 2018-07-23 19:40 xiuwenL 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 题意:求两点之间最短路的数目加上比最短路长度大1的路径数目 分析:可以转化为求最短路和次短路的问题,如果次短路比最短路大1,那么结果就是最短路数目加上次短路数目,否则就不加。 求解次短路的过程也是基于Dijkstra的思想。算法中用一个二维数组d[u][tag](tag=0代表最短路,1代表次短路) 阅读全文
posted @ 2018-07-23 11:05 xiuwenL 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 题意:就是判断图的最小生成树是否唯一,即求其最小生成树(MST)和次小生成树。 虽然是一道模板题,更重要的是理解求次小生成树的过程。求次小生成树建立在Prim算法的基础上。可以确定的是,次小生成树肯定是由最小生成树删去一条边再加上一条边得到。那么我们应该删去哪条边再加上哪条边呢?假设两点u,v之间有 阅读全文
posted @ 2018-07-22 11:42 xiuwenL 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 题意:一张带权无向图中,有K条边可以免费修建。现在要修建一条从点1到点N的路,费用是除掉免费的K条边外,权值最大的那条边的值,求最小花费。 分析:假设存在一个临界值X,小于X的边全部免费,那么此时由大于等于X的边组成的图,从点1到点N走过的边数小于等于K,那么这个X就是所求的答案。所以可以通过二分答 阅读全文
posted @ 2018-07-21 23:52 xiuwenL 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 题意:查询的是区间内每个数出现次数的平方×该数值的和。 分析:虽然是道莫队裸体,但是姿势不对就会超时。答案可能爆int,所以要开long long 存答案。一开始的维护操作,我先在res里减掉了a[pos]*cnt[a[pos]]*cnt[a[pos]],将cnt[a[pos]]+1,再将乘积加回。 阅读全文
posted @ 2018-07-20 20:04 xiuwenL 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 题意:求点1到点2的路径中,权值最大的那条边,其最小值是多少。 分析:最大值最小化。可以将迪杰斯特拉模板中的松弛操作加以修改,在O(n^2)的时间内解决该问题。其中需要注意的是,dist[i]指的是:走到点i的路径上,权值最大的边权。当每次找到最小的dist[u]之后,松弛操作是:对于点v,若max 阅读全文
posted @ 2018-07-20 14:39 xiuwenL 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 题意:N个数,M个查询,求[Li,Ri]区间内出现次数等于其数值大小的数的个数。 分析:用莫队处理离线问题是一种解决方案。但ai的范围可达到1e9,所以需要离散化预处理。每次区间向外扩的更新的过程中,检查该位置的数ai的出现次数是否已经达到ai或ai+1,以判断是否要更新结果。同理,区间收缩的时候判 阅读全文
posted @ 2018-07-20 10:20 xiuwenL 阅读(460) 评论(1) 推荐(0) 编辑
摘要: 题意:裸的莫队题,每个查询Li,Ri,返回区间[1,Li]和[Ri,N]区间中不同的数的个数。 分析:正常的离线查询,是求区间[Li,Ri]中要求的答案,而该题所求答案为外侧两个区间中的答案,那么cnt[i]维护的东西修改一下即可。对查询排序的时候,将R较大的排在前面,因为对于所维护的区间,是从两侧 阅读全文
posted @ 2018-07-19 18:27 xiuwenL 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个N*N的矩阵C,和一个N*N的只由0和1组成的矩阵X。 X满足以下条件: 1.X 12+X 13+...X 1n=1 2.X 1n+X 2n+...X n-1n=1 3.任意 i (1<i<n), 都有 ∑X ki (1<=k<=n)=∑X ij (1<=j<=n). 求∑C ij*X  阅读全文
posted @ 2018-07-18 19:53 xiuwenL 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 题意:N个点M条边的有向图,给定起点S和终点T,求每条边都不重复的S-->T的最短路有多少条。 分析:首先第一步需要找出所有可能最短路上的边。怎么高效地求出呢?可以这样:先对起点S,跑出最短路;对于每条边 e(u,v,w),若d[u]+w == d[v]。那么e就是最短路上的一条边。在前向星存储的图 阅读全文
posted @ 2018-07-17 22:43 xiuwenL 阅读(356) 评论(0) 推荐(0) 编辑