摘要:
【题解】 先用Tarjan缩环,然后重新建图并在图上跑dfs+DP 阅读全文
摘要:
分块。利用根号平衡保证复杂度。修改跨过一整块的直接打标记,不足一整块的暴力修改。复杂度为$O(n\sqrt{n})$ LOJ 6277 阅读全文
摘要:
【题解】 因为只询问一个点,所以记录地毯信息,倒着找第一个符合条件的地毯就是在最上面的。 阅读全文
摘要:
【题解】 差分+扫描线+权值线段树。 我们先把区间操作差分,变成2*m个点操作,然后按照位置对操作进行排序。接着按顺序处理每个位置的答案,如果当前位置有操作,就先在权值线段树上修改,再统计当前点的答案。 要注意的是,题目问的是出现次数最多的礼物的编号,所以权值线段树要维护的不仅是最大值,还有最大值的 阅读全文
摘要:
【题意概述】 给出一个n个点m条无向边的图以及起点s终点t,求s到t上的路径上边权最大值的最小值。 【题解】 裸的最短路。把松弛操作稍做修改即可。 阅读全文
摘要:
【题解】 先用tarjan缩点,然后如果某个强联通分量的出度为0,则该强联通分量内的点数为答案,否则无解。因为若其他所有的强联通分量都有边连向Ai,则Ai必定没有出边,否则Ai连向的点所属的强联通分量也属于Ai。 阅读全文
摘要:
【题解】 最短路裸题。。 本题要求出每个点到终点走最短路来回的距离,因此我们先跑一遍最短路得出每个点到终点的最短距离,然后把边反向再跑一遍最短路,两次结果之和即是答案。 阅读全文
摘要:
【题解】 弗洛伊德。更新距离的时候把$f[i][j]=min(f[i][j],f[i][k]+f[k][j])$改为$f[i][j]=min(f[i][j],max(f[i][k],f[k][j]))$. 阅读全文
摘要:
【题解】 要求出树上两点间的距离,树上的边有边权,本来应该是个LCA。 看他数据小,Xjb水过去了。。。其实也算是LCA吧,一个O(n)的LCA。。。 阅读全文
摘要:
【题解】 显然是个DP题。 设$f[i]$表示送$i$头牛过河所需的最短时间,预处理出$t[i]$表示一次性送i头牛过河所需时间,那么我们可以得到转移方程:$f[i]=min(f[i],f[i-j]+t[j]+t[0])$ (这里的$t[0]$指的是FJ独自过河的时间) 这样就可以做一个$n$方的D 阅读全文
摘要:
【题意概述】 给定一个长度为n的序列和若干个询问,每次询问序列的区间[L,R]中,大于等于a且小于等于b的数的个数,以及大于等于a且小于等于b的数值的个数。 序列长度不超过10^5,询问次数不超过10^6. 【题解】 使用莫队算法。与BZOJ 3809非常相似,只是比那道题多了一种询问,即求出区间[ 阅读全文
摘要:
【题解】 使用莫队算法。开一个权值树状数组维护区间内数值种类。 扩展时间是$logN$,所以总的时间复杂度是$O(n*\sqrt{n}*logn)$.勉强卡过去。 用分块可以更快。 阅读全文
摘要:
【题解】 1,先说说莫队算法。 莫队算法是用来离线处理区间问题的算法。非常易于理解和使用,且运用十分广泛。 假设我们现在已知区间[L,R]的答案,如果我们能以较低的时间复杂度扩展得到区间$[L-1,R],[L+1,R],[L,R-1],[L,R+1]$的答案,我们就可以使用莫队算法。通常可以接受的扩 阅读全文
摘要:
【题解】 1,本题要求维护一个序列,支持区间加k,询问区间平均数和方差。 2,询问平均数显然很好处理,在线段树上维护区间和sum以及区间长度len即可。 3,方差的处理就相对麻烦一些。需要研究一下公式。 我们先看看方差的公式: 那就是1/n乘上这个式子: 也就是区间平方和Sqr-区间和Sum的两倍+ 阅读全文
摘要:
【题解】 我们用sum[i]表示1~i的奇偶性,这样,我们要知道每个点的情况就必须知道每一个sum[i]. 如果我们当前已知sum[i-1],我们就可以通过查询i~j的情况知道sum[j],即查询i~j的操作是sum[i-1]与sum[j]相互转化的途径。那么我们可以把查询操作当成一条连接i-1与j 阅读全文
摘要:
【题解】 水题。。 保存连接方式,按顺序处理即可。 阅读全文
摘要:
【题解】 显然每个位置的贡献是它前面比它小的数的个数乘上它后面比它大的数的个数。 那么离散化之后用树状数组维护即可。 阅读全文
摘要:
【题解】 显然是个多重背包。但直接写背包会超时。所以我们试着优化。 怎么优化?我们发现,每个物品的个数$ai$可以拆分成几个数的和,用这些数中的某几个之和可以表示出$1$到$ai$的所有整数,并且不会超过$ai$ 这样我们可以把ai个相同的物品拆分成若干个互相独立的物品,然后跑01背包。 那么如何对 阅读全文
摘要:
推荐两个讲得很好的博客: http://blog.sina.com.cn/s/blog_70811e1a01014esn.html https://segmentfault.com/a/1190000003914228 1 #include<cstring> 2 #include<cstdio> 3 阅读全文
摘要:
【题解】 容易想到用线段树维护,但是无脑开T棵线段树会导致时间超限。怎么办呢?我们可以把一个区间的状态用30位2进制数表示。第$i$位为$1$表示这个区间有第$i$种颜色,为$0$表示没有。 这样我们只需要维护区间或的结果,并支持区间设为一个数即可。 1 #include<cstdio> 2 #in 阅读全文