摘要: 倍增预处理。 先看一下这张图的结构,因为出度都是$1$,所以路径是唯一的,又因为每个点都有出度,所以必然有环,也就是一直可以走下去。 接下来我们需要记录一些值便于询问: 设$t[i][j]$表示从$i$节点出发,走了${2^j}$步之后,到达的节点编号为$t[i][j]$。 设$s[i][j]$表示 阅读全文
posted @ 2016-08-24 20:46 Fighting_Heart 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 答案的来源不外乎于3种情况: 纯粹走路,用时记为${t_1}$;纯粹乘车,用时记为${t_2}$;乘车一定距离,然后走路,用时记为${t_3}$。 但是${t_1}$显然不可能成为最优解。 前两个时间都挺好算的,${t_3}$算的时候要讨论一下。 如果是$a*k+t>=b*k$,那么也就是说第一个$ 阅读全文
posted @ 2016-08-24 17:03 Fighting_Heart 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 排序,$O(n)$扫描。 $city$与$tower$混在一起排序,然后从左到右扫描一遍,计算出每一个$city$左边的$tower$对他的影响。 再从右到左扫描一遍,计算出每一个$city$右边的$tower$对他的影响。然后再扫描一遍计算出$max$就可以了。 阅读全文
posted @ 2016-08-24 16:12 Fighting_Heart 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 简单$dp$。 如果$a[i]>a[i-1]$,那么$dp[i]=dp[i-1]+1$。否则,$dp[i]=1$。答案为$dp[i]$中的最大值。 阅读全文
posted @ 2016-08-24 14:38 Fighting_Heart 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 双指针。 先统计一下字符种类数$sum$,然后进行尺取。 如果目前的区间$[L,R]$中不同字符个数$k<sum$,那么区间右端往右移动一位,更新种类数。 如果目前的区间$[L,R]$中不同字符个数$k==sum$,更新答案,然后区间左端往右移动一位,更新种类数。 阅读全文
posted @ 2016-08-24 14:29 Fighting_Heart 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 统计一下有多少行多少列被占领了。 阅读全文
posted @ 2016-08-24 13:56 Fighting_Heart 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 每一组的和为$\frac{{2×\sum\limits_{i = 1}^n {a[i]} }}{n}$,然后暴力配对就可以了。 阅读全文
posted @ 2016-08-24 13:14 Fighting_Heart 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 统计每一条边的贡献,假设$u$是$v$的父节点,$(u,v)$的贡献为:$v$下面大学个数$f[v]$与$2*k-f[v]$的较小值。 阅读全文
posted @ 2016-08-24 13:00 Fighting_Heart 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 要保证总时间最短,因为总时间计的是最后一个人到达的时间,也就是最后一个人要求尽快到达,也就是说我们要让最后一个人乘车时间尽量多。再仔细想想可以发现每个人的乘车时间和走路时间都是一样的。 因此,可以二分每个人的乘车时间$m$,然后进行验证,如果发现某一个人的乘车时间不到$m$,那么$m$不可取,上界缩 阅读全文
posted @ 2016-08-24 10:46 Fighting_Heart 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 并查集,构造。 先看一下图的特殊性,按照这种输入方式,一个点的入度最多只有$1$,因此,问题不会特别复杂,画画图就能知道了。 如果给出的序列中已经存在$a[i]=i$,那么随便取一个$a[i]=i$的$i$作为$root$,剩下的每一条边$a[i] \to i$,可以用并查集来处理,如果发现某条边$ 阅读全文
posted @ 2016-08-24 08:21 Fighting_Heart 阅读(164) 评论(0) 推荐(0) 编辑