Codeforces Round #369(div 2)

A;=w=

B:=w=

C:题意:有一排树,有的树已经上色,有的树没有上色,只能给没上色的树上色,一共m种颜色,不同的树上不同的色花费不同,涂完色后,连续颜色的树成为一段。对于给定的段数k,求出最小花费

分析:不是贪心就是dp,这很显然不是贪心

  f[i][j][k]表示前i个树,第i个树涂色是j,已经有k段树的最小花费

  如果第i个树未染色:f[i][j][k]=min(f[i-1][j][k]+v[i][j],f[i-1][j'][k-1]+v[i][j'])

  如果已经染色:f[i][j][k]=min(f[i-1][j][k],f[i-1][j'][k-1]) 注意没花费

  注意初始化

D:题意:n个点n条边的有向图,每条边可以改变方向,询问有多少种方法可以使得图中无环

   分析:考虑下n个点n条边图的特征

          首先能想到的是n个点n-1条边的树加条边成个环

    继续想想就会发现不可能存在复环,不然边数就不对了,也就是一个环套树

    考虑影响一个环的只有环上的点,所以如果假设环外的点有a个,那么对答案的贡献就是2^a

    再考虑环上,一般来说,只要环上一条边方向变了,那环就破坏了,但要注意特殊情况,也就是全部反向和全部不反向,所以如果环上点b个,那么对答案的贡献就是2^b  -2

         最后要考虑的一点是,有可能是多个连通块,所有答案相乘就可以了

        至于实现,可以把所有单向边当作双向边,然后dfs跑一个连通块得出a+b,在跑dfs途中用个栈记录下点,然后重复时就递归栈得出b,所以a和b就都知道了

E:题意:求1-[A(2^n,k)/2^(nk)]的值,要求先约分,再模1e6+3

   分析:问题分两个,先是约分,再是模

             整理下式子发现,分子分母的质因数只有2,所以最大公约数肯定是2^x

             这个x取决于(2^n)!/(2^n - k)!的2的指数

             求一个阶乘数中2的指数就那个logn算法 除2除4除8什么的辣

      第一个问题解决了

             再解决第二个问题,分母可以暴力模,分子头疼的是那k个数乘积的模,因为k很大

              注意到mod数很小,所以分子那项乘了mod数后结果就0了,就退出

              最后乘上2^x逆元

             

   

原文地址:https://www.cnblogs.com/wmrv587/p/5854870.html