题面

题解

求一个有特殊性质的有向图的生成树的个数。

首先,有向图的生成树的个数可以用矩阵树定理,能够得到\(40\)分。

但是如果它是一个\(\mathrm{DAG}\)就很好做,枚举每一个点的父亲,答案就是\(\prod d[i]\),\(d\)是每个点的入度

发现加了一条边之后只会形成一个环,设环上的点为\(a_1, a_2, \cdots, a_k\),那么形成的不合法的生成树有\(\frac{\prod_i d[i]}{\prod_{i = 1} ^ k d[a_i]}\)种。

于是答案就是\(\prod_i d[i] - \frac{\prod_i d[i]}{\prod_{i = 1} ^ k d[a_i]}\)

代码

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define clear(x, y) memset(x, y, sizeof(x))inline int read()
{int data = 0, w = 1; char ch = getchar();while(ch != '-' && (!isdigit(ch))) ch = getchar();if(ch == '-') w = -1, ch = getchar();while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();return data * w;
}const int maxn(100010), maxm(200010), Mod(1000000007);
struct edge { int next, to; } e[maxm];
int head[maxn], e_num, n, m, vis[maxn], deg[maxn];
int sx, sy, ans = 1, dmul = 1, f[maxn];
inline void add_edge(int from, int to)
{e[++e_num] = (edge) {head[from], to};head[from] = e_num;
}int fastpow(int x, int y)
{int ans = 1;for(; y; y >>= 1, x = 1ll * x * x % Mod)if(y & 1) ans = 1ll * ans * x % Mod;return ans;
}void dfs(int x)
{if(vis[x]) return; vis[x] = 1;if(x == sy) return (void) (f[x] = 1ll * dmul* fastpow(deg[x], Mod - 2) % Mod);for(RG int i = head[x]; i; i = e[i].next)dfs(e[i].to), f[x] = (f[x] + f[e[i].to]) % Mod;f[x] = 1ll * f[x] * fastpow(deg[x], Mod - 2) % Mod;
}int main()
{n = read(), m = read(), sx = read(), sy = read();for(RG int i = 1, a, b; i <= m; i++)a = read(), b = read(), add_edge(b, a), ++deg[b];++deg[1];for(RG int i = 1; i <= n; i++){if(i == sy) ans = 1ll * ans * (deg[i] + 1) % Mod;else ans = 1ll * ans * deg[i] % Mod;dmul = 1ll * dmul * deg[i] % Mod;}dfs(sx); ans = (ans - f[sx] + Mod) % Mod;printf("%d\n", ans);return 0;
}

转载于:https://www.cnblogs.com/cj-xxz/p/10412384.html

【HNOI2015】落忆枫音相关推荐

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

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

  2. [HNOI2015] 落忆枫音

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

  3. Bzoj4011 [HNOI2015]落忆枫音

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

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

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

  5. [HNOI2015]落忆枫音

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

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

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

  7. luogu3244 bzoj4011 HNOI2015 落忆枫音

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

  8. luogu P3244 [HNOI2015]落忆枫音

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

  9. 洛谷 P3244 / loj 2115 [HNOI2015] 落忆枫音 题解【拓扑排序】【组合】【逆元】

    组合计数的一道好题.什么非主流题目 题目背景 (背景冗长请到题目页面查看) 题目描述 不妨假设枫叶上有 \(n​\) 个穴位,穴位的编号为 \(1\sim n​\).有若干条有向的脉络连接着这些穴位. ...

  10. BZOJ 4011 HNOI2015 落忆枫音

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

最新文章

  1. java 对象怎么序列化,java对象序列化总结
  2. java常用的几种线程池
  3. [gic]-ARM gicv3/gicv4的详细介绍-2020/08
  4. extern “C”
  5. Linux 用户名、主机添加背景色
  6. linux shell 上传,下载ftp文件
  7. 老男孩IT教育38期面授班 学员邢伟的决心书
  8. 修改linux远程主机名命令hostname
  9. datax 高级_GitHub - HeyTool/DataX
  10. 素材干货|UI设计师不会插画?不难搞!有了这些模板,作品安了!
  11. django1.8升级1.9的几个问题
  12. win8卸载mysql数据库,彻底卸载win8自带的metro应用的方法
  13. Nginx测试实验--rest服务端负载均衡应用
  14. Processing-基础小坑-
  15. 大腾讯的第一个开源项目「Tinker」
  16. android imageview 半透明,如何将半透明视图叠加到ImageView上?
  17. Access2016学习3
  18. 设备状态监测及故障预警,你了解多少?
  19. mongo配置项说明
  20. 春节攻防战的战前谋划-电商必看

热门文章

  1. [python小工具]加减法出题器
  2. 高中信息技术新课程标准
  3. 误删除文件怎么才能恢复
  4. android 清理系统垃圾,安卓手机怎么清理系统垃圾
  5. intel 显卡驱动的节能设置(新版驱动)
  6. 带有H5标签的字符串
  7. linux 如何获取最高权限 设定
  8. 本地局域网(内网)远程连接报错0x112f的一种解决方案-由于一个协议错误(代码: 0x112f),远程会话将被中断。请重新跟远程计算机连接
  9. 【BUG】【已解决】VS2019:应用程序无法正常启动(0x000007b)
  10. 计算机软件如何永久删除,电脑上如何卸载软件? 如何从电脑上彻底删除一个软件?...