zoukankan      html  css  js  c++  java
  • [题解] [HNOI2015]落忆枫音

    [题解] [HNOI2015]落忆枫音

    题意

    给一张 (n) 个点 (m) 条边的 (DAG) ,保证点 (1) 不存在入边,现在需要在 (DAG) 中加入一条不在原图中的边 ((x,y)) ,求这个有向图以 (1) 为根的树形图个数对 (1e9+7) 取模的结果。

    (而且有点像是骗狗进来杀)

    范围

    (1 le n le 100000, n−1 le m le min(200000 , frac{2n(n−1)}{2} ),1 le x,y,u_i,v_i le n)

    题解

    先假设我们没有加上 ((x,y)) 这条边,那么可以比较简单的知道总方案数, (r_i) 为入度数量

    [ans= prod^{n}_{i=1}r_i ]

    接下来,我们来看看加上 ((x,y)) 的限制后,答案该怎么统计。

    显然只会增加一些非法的情况,我们只要减去这些非法情况就OK了。

    假设存在一个环,显然不合法的情况都在环上的点产生的。

    我们设这些点为 (a_1,a_2, a_k)

    那么不合法的情况为:

    [frac{ans}{prod^k_{i=1}r_i} ]

    又由于环的入度已经确定,那么其他的可选随意选择。

    (f_v) 记录从 (y)(v)(frac{ans}{prod^k_{i=1}r_i}) 的值

    为为那么转移方程为:

    [f[u]=sum f[v] ]

    最后的答案为:

    [ans=prod^n_{i=1}(i==y)? r_{i+1} : r_i - f_x ]

  • 相关阅读:
    JVM classloader
    面试整理
    工具配置链接
    IntelliJ IDEA 热部署
    IntelliJ IDEA 常用快捷键
    类文件结构
    判断对象存活的方法
    JVM 运行时数据区域
    vim编辑16进制
    阿里云yum源
  • 原文地址:https://www.cnblogs.com/ztz-cpp/p/13096265.html
Copyright © 2011-2022 走看看