摘要:        
n ne[n]是n的最长循环节长度,其实就是n 最短前缀=后缀长度 然后我们要求最短循环节,其实就是ne一直往前跳,跳到不能跳为止,这时的n ne[n]就是n的最短循环节长度 cpp include include using namespace std; const int N=1000005;     阅读全文
posted @ 2018-09-08 20:20
lokiii
阅读(134)
评论(0)
推荐(0)
        
            
        
        
摘要:        
设f[s]为已经 从上到下 叠了状态为s的牛的最大稳定度,转移的话枚举没有在集合里并且强壮度 =当前集合牛重量和的用min(f[s],当前放进去的牛还能承受多种)来更新,高度的话直接看是否有合法集合的高度达到要求即可 cpp include include using namespace std;     阅读全文
posted @ 2018-09-08 19:44
lokiii
阅读(182)
评论(0)
推荐(0)
        
            
        
        
摘要:        
显然是状压,显然不可能把所有格子压起来 仔细观察发现只有机关周围的四个格子有用以及起点,所以我们用spfa处理出这些格子两两之间的距离(注意细节……这里写挂了好几次),然后设f[s][i]为碰完的机关石状态为s,现在在有用格子的第i个的最小停下次数,转移按照套路即可 cpp include incl    阅读全文
posted @ 2018-09-08 19:12
lokiii
阅读(255)
评论(0)
推荐(0)
        
            
        
        
摘要:        
枚举起点做spfa,然后一条边在最短路上的条件是dis[e[i].to]==dis[u]+e[i].va,所以每次spfa完之后,dfs出a[i]表示经过i点的最短路的起点数,b[i]表示经过i点的最短路的终点数,一条边(u,v)在当前起点下的答案就是a[u] b[v],最终答案是总和 因为最短路构    阅读全文
posted @ 2018-09-08 15:42
lokiii
阅读(170)
评论(0)
推荐(0)
        
            
        
        
摘要:        
对于每个i,以它为左端点的最优右端点一定是单增的,所以用单调栈维护 具体的,单调栈里放的是和单调的长为d的子段,然后枚举右端点,如果这段的和 当前长为d子段最大的和大于p的话,左端点右移同时注意单调栈里的子段的左端点不能小于当前左端点,需要一起右移 cpp include include using    阅读全文
posted @ 2018-09-08 11:28
lokiii
阅读(156)
评论(0)
推荐(0)
        
            
        
        
摘要:        
倍增数组的20和N写反了反复WAWAWA…… 注意到a和b在每个点上出发都会到一个指定的点,所以这样构成了两棵以n点为根的树 假设我们建出了这两棵树,对于第一问就可以枚举起点然后倍增的找出ab路径长度的比值,第二问同理,这里倍增的时候注意是先跳a再跳b,所以同一个点b的倍增数组要从a在这个点的的父亲    阅读全文
posted @ 2018-09-08 10:56
lokiii
阅读(149)
评论(0)
推荐(0)
        
 
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号