HackerRank Definite Random Walks 题解
HackerRank Definite Random Walks 题解
首先图的样子是一个根向树+一条反向的返祖边。
对于环上的点,所有经过环上的边到达它的点都可以规约到只走一边环上的边。
钦定一个环上的点为root。
然后处理出每一个深度的点的数量。
这样可以算出所有经过一段环上的边的贡献。(大概就是将概率生产函数的反串和深度生产函数做卷积就好了)
然后考虑树的贡献。
对dfs序列分块,然后预处理每一块的卷积结果就好了!
令块大小为\(O(\sqrt{N\log N})\),时间复杂度为\(O(N\cdot \sqrt{N\log N})\)。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号