摘要: 把环倍长,破环成链设f[i]表示i一次性能飞达的最右边的点,因为f[]单调递增,所以可以$O(n)$求出这样就形成了一个树结构,对于每个节点,在其到根节点路径上二分出深度最大的点,使得其飞过一圈常数优化:注意到答案只有两种,所以可以进行最优性剪枝内存优化:只需要开3个200W的数组即可,分别表示相邻... 阅读全文
posted @ 2015-01-08 20:53 Claris 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 首先为了保证发车时间都不同,T[i]=max(T[i],T[i-1]+1)然后设f[i]表示前i列车回来的最早时刻f[i]=min(max(T[i],f[j]+i-j-1)+s*2+i-j-1)=min(max(-j+T[i],f[j]-2*j+i-1))+s*2+i-1=min(min(-j)+T... 阅读全文
posted @ 2015-01-08 13:14 Claris 阅读(526) 评论(0) 推荐(0) 编辑
摘要: 1 n d v相当于给$a[x]+=v[\gcd(x,n)=d]$\[\begin{eqnarray*}&&v[\gcd(x,n)=d]\\&=&v[\gcd(\frac{x}{d},\frac{n}{d})=1]\\&=&v\sum_{k|\gcd(\frac{x}{d},\frac{n}{d})... 阅读全文
posted @ 2015-01-07 19:38 Claris 阅读(663) 评论(0) 推荐(0) 编辑
摘要: 注意到集结操作相当于合并一些点于是我们可以使用并查集对于每一行、每一列维护一个链表,储存里面的点查询x时,在并查集中找到x的祖先u,此时x的坐标就是u的坐标然后扫描u所在行列的链表,依次删除每个点,并把这些点合并成一个新点,同时计算贡献对于修改操作,可以看作是分离,新建一个点代表修改后的点,然后对于... 阅读全文
posted @ 2015-01-07 17:35 Claris 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 对于每个位置求出L[i]表示左边最大的j,满足从j开始到i-1中存在第一个子序列R[i]表示右边最小的j,满足从j开始到i-1中存在第二个子序列然后枚举颜色是相遇点的位置,如果L[i]左边、R[i]右边存在一样的颜色,则可行#include#define N 1000010inline void r... 阅读全文
posted @ 2015-01-07 17:09 Claris 阅读(625) 评论(0) 推荐(0) 编辑
摘要: 问题相当于找到一个最大的k满足在$[x_1,x_2]$,$[y_1,y_2]$中都有k的倍数等价于$\frac{x_2}{k}>\frac{x_1-1}{k}$且$\frac{y_2}{k}>\frac{y_1-1}{k}$注意到这只有$O(\sqrt{n})$种取值,于是可以分段计算,做到$O(\... 阅读全文
posted @ 2015-01-05 17:39 Claris 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 设f[i]表示到i最少休息次数,f[i]=min(f[j]+(h[j]#define N 1000010inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c='0')&&(cf[y];}int main(){ for(rea... 阅读全文
posted @ 2015-01-05 13:13 Claris 阅读(270) 评论(0) 推荐(0) 编辑
摘要: d[x]表示走完x的子树并回到x所需的时间f[x]表示从走到x开始计时,x子树中最晚的点安装完的最早时间d[x]=sum(d[i]+2),i是x的孩子f[x]的计算比较复杂:考虑将x的各棵子树按一定顺序排列,第i个走的子树是u,则它的贡献为sum(d[j]+2)+f[u]+1,j#include#d... 阅读全文
posted @ 2015-01-05 12:41 Claris 阅读(617) 评论(0) 推荐(1) 编辑
摘要: BZOJ AC900题纪念~~若K>0,则设f[i][j]表示i位数字,积为j的数字的个数g[i][j]表示i位数字,积为j的数字的和DP+Hash预处理查询时枚举LCP然后统计贡献若K=0,则设f[i][j][k][l]表示已知前i位,乘积是否不为0,是否等于x,是否有数字的数字的个数g[i][j... 阅读全文
posted @ 2015-01-04 19:43 Claris 阅读(712) 评论(0) 推荐(0) 编辑
摘要: 首先求出SCC缩点,E[T]=0,按拓扑序计算对于无边连出的块,如果不是T所在块,则称该块是死路块对于一个块,如果其中的点连出的边是死路块,则它也是死路块否则对于每块进行高斯消元求出期望如果S点所在块为死路块,则答案为INF#include#includeconst int N=10010,M=10... 阅读全文
posted @ 2015-01-03 17:36 Claris 阅读(561) 评论(0) 推荐(0) 编辑
摘要: a[i][j]:i移动一根变成j是否可能b[i][j]:i增加一根变成j是否可能枚举在一个数字中移动的情况以及在两个数字中移动的情况#include#include#include#define N 1010char s[N];int n,m,i,j,I,J,k,t,a[10][10],b[10][... 阅读全文
posted @ 2015-01-01 22:45 Claris 阅读(436) 评论(0) 推荐(0) 编辑
摘要: 这一年经历了各场比赛,最终还是滚粗收尾。这一年凭着热情在BZOJ上刷了好多水,滚粗之后不知怎地,这股热情还是没有消退,总是一有空就打开lydsy找题做。大概是这个缘故,我从没想过的,将近900题,居然一年的工夫就刷完了…我从没想过的,Year榜Rank1,居然一直以一个非VIP用户的身份保持着…2... 阅读全文
posted @ 2015-01-01 09:31 Claris 阅读(492) 评论(0) 推荐(1) 编辑
摘要: 不跳过任何点的路程=dis(l,l+1)+dis(l+1,l+2)+...+dis(r-2,r-1)+dis(r-1,r)要跳过一个点i,则要最小化dis(i,i+2)-dis(i,i+1)-dis(i+1,i+2)于是用线段树支持单点修改、区间查询和以及最小值即可#include#define N... 阅读全文
posted @ 2014-12-31 20:59 Claris 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 莫比乌斯反演得$ans=\sum g[i]\frac{a}{i}\frac{b}{i}$其中$g[i]=\sum_{j|i}f[j]\mu(\frac{i}{j})$由f和miu的性质可得设$n=p[1]^{a[1]}p[2]^{a[2]}...p[k]^{a[k]}$若存在$a[i]$不等于$a[... 阅读全文
posted @ 2014-12-30 17:57 Claris 阅读(833) 评论(0) 推荐(0) 编辑
摘要: n维超立方体有$2^{n-i}C_n^i$个i维元素,于是$O(n)$预处理出1到n的逆元,再$O(n)$计算即可。注意Trick:P可能小于n,所以要将数字表示成$a\times P^b$的形式。#include#define N 10000001typedef long long ll;int ... 阅读全文
posted @ 2014-12-27 21:45 Claris 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 线段树每个节点维护d[4][4]表示四个顶点之间的最短路,合并时用Floyed合并,查询时分三段然后合并。#include#define N 100010struct P{int d[4][4];}T[N>2,flag,ans,d1,d2;inline void up(int&x,int y){if... 阅读全文
posted @ 2014-12-26 12:08 Claris 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 线段树套并查集,怎么暴力怎么写。#include#define N 202struct P{int c[2],f[N*2];}T[N*4];int n,m,i,j,a[N][N],f[N*4],t[N*4];int F(int x){return f[x]==x?x:f[x]=F(f[x]);}in... 阅读全文
posted @ 2014-12-26 09:33 Claris 阅读(826) 评论(6) 推荐(0) 编辑
摘要: 询问[l,r]实际就是询问$\varphi(该区间内所有数的乘积)$$\varphi(n)=n\times...\times(1-\frac{1}{p_i})$由于素数只有60个,所以只需用线段树维护区间内所有数字的积,以及压位表示的出现过的素数即可$O(\log n)$每次操作#includety... 阅读全文
posted @ 2014-12-24 17:17 Claris 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 左右与右左是两个独立的问题设f[i]表示i时刻左右车道减少一条的答案g[i]表示i时刻右左车道增加一条的答案ans=min(f[i]+g[i+r])计算f[i]:首先暴力计算出f[m+1],同时记录下每个时刻刚开走的车的数量now[i]从m到1计算f[i],如果该时刻开走的车数不足n1+1,则无影响... 阅读全文
posted @ 2014-12-21 13:36 Claris 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 左上角和右下角不四连通等价于左下角和右上角八连通枚举正方形的左上角,先二分出最大的边长,使得里面不含障碍物然后再二分出最小的边长,使得两部分连通,用前缀和判断这题WA了好久…一直对拍都没问题…于是去看原题,发现有SPJ…然后改了个枚举姿势就过了…#include#define N 1510int n... 阅读全文
posted @ 2014-12-19 14:20 Claris 阅读(354) 评论(0) 推荐(0) 编辑