思路

给出了一个DAG,要求以1为根的外向树的个数
如果没有加边的条件,就非常好做
每个点都只保留一条入边,最后得到的一定就是一个符合条件的树了(因为给了一个DAG啊)
所以答案是\(\prod_{i=2}^nd_i\)
加上一条边时候,可能会出现环的情况,要把它去掉
假设环中的点是\(a_1,a_2,a_3,\dots,a_k\),去掉的情况数就是\(\frac{\prod_{i=2}^nd_i}{\prod_{i=1}^kd_{a_i}}\)(除了环上的点之外其他随便选,成环只有环上的点每个点都选择环上的边的一种情况)
对后面的式子在原DAG上直接拓扑求一下就好了

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#define int long long
using namespace std;
const int MOD = 1000000007;
int n,m,x,y;
int u[100100<<1],v[100100<<1],fir[100100],nxt[100100<<1],d[100100],cnt,f[100100],ans,d_t[100100];
void addedge(int ui,int vi){++cnt;u[cnt]=ui;v[cnt]=vi;d[vi]++;d_t[vi]++;nxt[cnt]=fir[ui];fir[ui]=cnt;
}
int pow(int a,int b){int ans=1;while(b){if(b&1)ans=(ans*a)%MOD;a=(a*a)%MOD;b>>=1;}return ans;
}
queue<int> q;
void topu(void){f[y]=ans;for(int i=1;i<=n;i++)if(!d_t[i])q.push(i);while(!q.empty()){int x=q.front();q.pop();f[x]=(f[x]*pow(d[x],MOD-2))%MOD;for(int i=fir[x];i;i=nxt[i]){f[v[i]]=(f[v[i]]+f[x])%MOD;d_t[v[i]]--;if(!d_t[v[i]])q.push(v[i]);}}}
signed main(){scanf("%lld %lld %lld %lld",&n,&m,&x,&y);d[y]++;for(int i=1;i<=m;i++){int a,b;scanf("%lld %lld",&a,&b);addedge(a,b);}ans=1;for(int i=2;i<=n;i++)ans=(ans*d[i])%MOD;if(y==1){printf("%lld\n",ans);return 0;}topu();printf("%lld\n",(ans-f[x]+MOD)%MOD);return 0;
}

转载于:https://www.cnblogs.com/dreagonm/p/10549922.html

P3244 [HNOI2015]落忆枫音相关推荐

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

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

  2. luogu P3244 [HNOI2015]落忆枫音

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

  3. [HNOI2015] 落忆枫音

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

  4. Bzoj4011 [HNOI2015]落忆枫音

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

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

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

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

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

  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. BZOJ 4011 HNOI2015 落忆枫音

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

最新文章

  1. MybatisPlus处理Mysql的json类型
  2. 运维工程师必备之MySQL数据的主从复制、半同步复制和主主复制详解
  3. Xamarin Essentials教程使用加速度传感器Accelerometer
  4. 「MacOS」Mac快捷键
  5. TCP/IP学习笔记(三)TCP流量控制以及滑动窗口
  6. 分布式文件系统—HDFS—Java API操作
  7. 他在阿里的逆袭,只因为想做个“锤子”
  8. 文件服务器 权限和安全,NTFS安全权限、文件共享服务器
  9. linux中的环境变量作用
  10. spring-boot-资源处理
  11. 2021低压电工考试题初训复审
  12. 法向量变换矩阵的推导
  13. 物联网带动传感器站上风口 华灿光电并购美新半导体
  14. 十道解分式方程及答案_解分式方程的题出20道还要带答案
  15. 什么是C语言及C语言的特点
  16. 2022-04-28 Unity核心1——图片导入与图片设置
  17. 微信小程序之日期时间筛选器实现(支持年月日时分)
  18. 数据结构与算法之基础概述
  19. Home Assistant初学者指南 - 5 之 如何在Home Assistant中设置Picture Elements卡 - Lovelace
  20. c#中在一个窗体中触发另一个窗体的事件

热门文章

  1. Pandas文件读取详解
  2. .Net软件设计新思维
  3. 操作系统和嵌入式开发 你愿意参加吗?
  4. (随机|批量)梯度下降法、(拟)牛顿法、共轭梯度法、启发式算法
  5. Android onTouchEvent方法
  6. 建立一个中文名字的文件夹Python
  7. python处理era5_python批量下载EC—ERA5再分析资料
  8. 《高翔视觉slam十四讲》学习笔记 第四讲 李群与李代数
  9. git安装后设置用户名和密码
  10. 7-7 旅游规划 (25 分)