题意: 给你一个DAG,再给你加一条边,之后图不保证是DAG了,求新图中以一为根的生成树有多少个。

由于原图是个DAG,我们对每个点随机找爹,总能形成一棵生成树,那么答案就是2到n所有点入度的乘积。在加了一条边 x->y 之后,如果再套用这个公式,无非就是多了加了这条边之后与一条y->x的路径构成环的方案。

那么我们可以对于每一条y->x的路径考虑,它多贡献的答案就是除了它以外其他点的入度之积,可以看作又分成了若干个DAG。

这样的话思路就挺明显了,令dp[i]表示从y出发走到i点对答案多产生的贡献,令ans为2号点到n号点的乘积,初始dp[y]设置为ans/deg[y],按照图的拓扑序进行转移,走到每一个新点就相当于把这个点加入从y出发的路径,即

dp[nex]+=dp[now]/deg[nex]

这样求得的dp[x]即为答案。

下附AC代码。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define maxn 200005
using namespace std;
typedef long long ll;
const int mod=1e9+7;
int n,m,nx,ny,tot,ans=1;
int head[maxn],nex[maxn],to[maxn];
void add(int x,int y)
{to[++tot]=y;nex[tot]=head[x];head[x]=tot;
}
int deg[maxn],deg1[maxn],inv[maxn];
void getinv()
{inv[1]=1;for(int i=2;i<=m+1;i++){inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;}
}
int q[maxn],dp[maxn];
void topologicalsort()
{int h=0,t=-1;dp[ny]=ans;
//  cout<<"its "<<ny<<" "<<ans<<endl;for(int i=1;i<=n;i++)if(deg[i]==0)q[++t]=i;while(h<=t){int now=q[h]; h++;
//      cout<<now<<" "<<dp[now]<<endl;dp[now]=(1ll*dp[now]*inv[deg1[now]])%mod;
//      cout<<now<<" "<<dp[now]<<" "<<inv[deg1[now]]<<endl;for(int i=head[now];i;i=nex[i]){dp[to[i]]=(dp[to[i]]+dp[now])%mod;deg[to[i]]--;if(deg[to[i]]==0)q[++t]=to[i];}}
}
int main()
{scanf("%d%d%d%d",&n,&m,&nx,&ny); deg1[ny]++;for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);add(x,y);deg[y]++;deg1[y]++;}
//  int ans=1;for(int i=2;i<=n;i++)ans=(1ll*ans*deg1[i])%mod;if(ny==1){printf("%d\n",ans);return 0;}
//  cout<<ans<<endl;getinv();
//  cout<<ans<<endl;topologicalsort();printf("%d\n",(ans-dp[nx]+mod)%mod);
}

bzoj 4011: [HNOI2015]落忆枫音相关推荐

  1. BZOJ 4011 HNOI2015 落忆枫音

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=4011 题目很长,写得也很有诗意与浪漫色彩,让我们不禁感叹出题人是一个多么英俊潇洒的人. 所 ...

  2. P3244 [HNOI2015]落忆枫音(DAG上的动态规划问题,朱刘定理,乘法逆元)

    P3244 [HNOI2015]落忆枫音 样例太坑了!竟然和题目描述给的图不一样! 题目描述 给定一张有向无环图,这张图满足一个性质:以点1为根节点,保证至少有一棵有向树,连接所有的节点. 现在向这张 ...

  3. [HNOI2015] 落忆枫音

    题目描述 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂......我们也不可能再 ...

  4. Bzoj4011 [HNOI2015]落忆枫音

    Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 983  Solved: 533 Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫 ...

  5. BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)

    Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题.  「相信吧.不然我们是什么,一团肉吗?要不是有灵魂--我们也 ...

  6. bzoj4011[HNOI2015]落忆枫音

    http://www.lydsy.com/JudgeOnline/problem.php?id=4011 记新加入的边的起点为$x$,终点为$y$ 首先,我们先考虑新加入的边没有构成环的情况,即在原图 ...

  7. [HNOI2015]落忆枫音

    题目描述 不妨假设枫叶上有 n个穴位,穴位的编号为 1 ~  n.有若干条有向的脉络连接 着这些穴位.穴位和脉络组成一个有向无环图--称之为脉络图(例如图 1),穴 位的编号使得穴位 1 没有从其他穴 ...

  8. 【题解】 [HNOI2015]落忆枫音 (拓扑排序+dp+容斥原理)

    原题戳我 Solution: (部分复制Navi_Aswon博客) 解释博客中的两个小地方: \[\sum_{\left(S是G中y→x的一条路径的点集\right))}\prod_{2≤j≤n,(j ...

  9. luogu3244 bzoj4011 HNOI2015 落忆枫音

    这道题目题面真长,废话一堆. 另外:这大概是我第一道独立做出来的HNOI2011年以后的题目了吧.像我水平这么差的都能做出来,dalao您不妨试一下自己想想? 题目大意:给一个DAG,其中1号点没有入 ...

  10. luogu P3244 [HNOI2015]落忆枫音

    传送门 md这题和矩阵树定理没半毛钱关系qwq 首先先不考虑有环,一个\(DAG\)个外向树个数为\(\prod_{i=2}^{n}idg_i(\)就是\(indegree_i)\),因为外向树每个点 ...

最新文章

  1. Java知识点总结(JDBC-封装JDBC)
  2. WinAPI: waveOutMessage - 向波形输出设备发送一条消息
  3. 十六、Struts2文件上传与下载
  4. C#数据结构-双链表
  5. Mac安装mysql数据库【亲测有用】
  6. Python邻接矩阵邻接表转换
  7. JavaScript 基本语法及面试注意点
  8. 自动化审批决策树助你面试更上一层楼
  9. loadrunner 运行脚本-Run-time Settings之Preferences设置
  10. Deep Learning Neural Style Transfer(VGG) ——By何子辰
  11. 不用找了,基于 Redis 的分布式锁实战来了
  12. 2022年最新《谷粒学院开发教程》:1 - 构建工程篇
  13. xp计算机无法远程桌面连接,xp系统远程桌面不能连接指定计算机的处理方法
  14. PS:修复图片模糊(字体)
  15. 《管理的常识》3-“什么是组织结构”读后感及读书笔记
  16. 几个好中的计算机类EI源刊
  17. 台式计算机连不上网怎么办,台式电脑插了网卡连不上网怎么办?几个方面介绍及解决方法...
  18. 51单片机c语言实践教程,51单片机C语言实验与实践教程.pdf
  19. 怎么给input插入一个图片
  20. Power BI 数据导入(SQL Server、MySQL、网页数据)

热门文章

  1. Tomcat的作用(自用)
  2. Linux-文件打开数配置实践
  3. 实时音视频质量评估方案
  4. pandoc把word转为html,利用 Pandoc 实现文档格式转换
  5. 随机森林+python代码实现
  6. python mro_python之理解super及MRO列表
  7. 人工智能神经网络概念股,神经网络芯片概念股
  8. 1043 : 最大值
  9. 头条推荐量越来越少,是否还要坚持下去?
  10. 软件相貌测试准确吗,测另一半的相貌超准软件 提前了解对象的外貌