考虑正常 DAG 的有向生成树的方案数。

很明显发现,每个节点只需要挑一个父亲即可。方案数为 \(\prod_{i=2}^nd[i]\)。

再考虑加上新边后新增的 DAG 数量。

将点分为两类。假设这条新边是 \((s,t)\),那么我们将能到达 \(s\) 且能够被 \(t\) 到达的节点拎出来算一类,剩下的节点算另一类。

因为是考虑父亲,所以二类节点的贡献仍然是度数。考虑一类节点的贡献。

一类节点的贡献相当于 \(t\) 无法到达 \(s\) 的树的方案数。正难则反,考虑有多少种方法使得 \(t\) 能够到达 \(s\)

总方案数是很容易计算的,度数之积。

我们每次钦定一条从 \(t\) 到 \(s\) 的链,然后强制钦定这些边都要连上。

其他节点的贡献仍然是度数之积。

我们让度数之积最后乘上,变成钦定节点的度数之积的逆元。

我们现在做的问题相当于从 \(t\) 到达 \(s\) 的每条路径的权值之积,随便搞个 DP 统计一下就好了。

复杂度是线性的。(逆元可以预处理)

#include<cstdio>
typedef unsigned ui;
const ui M=1e5+5,mod=1e9+7;
ui n,m,s,t,cnt[2],h[2][M],d[M],deg[M],inv[M],dp[M];bool v1[M],v2[M];ui L,R,q[M];
struct Edge{
ui v,nx;
}e[2][M<<1];
inline void Add(const ui&id,const ui&u,const ui&v){
e[id][++cnt[id]]=(Edge){v,h[id][u]};h[id][u]=cnt[id];
}
signed main(){
ui ans(1);
scanf("%u%u%u%u",&n,&m,&s,&t);inv[1]=1;
for(ui i=2;i<=n;++i)inv[i]=1ull*(mod-mod/i)*inv[mod%i]%mod;
while(m--){
ui u,v;scanf("%u%u",&u,&v);
Add(0,u,v);Add(1,v,u);++d[v];
}
for(ui i=2;i<=n;++i)ans=1ull*ans*d[i]%mod;
for(ui i=1;i<=n;++i)deg[i]=d[i];
q[L=R=1]=t;v1[t]=true;
while(L<=R){
ui u=q[L++];
for(ui v,E=h[0][u];E;E=e[0][E].nx)if(!v1[v=e[0][E].v]){
v1[v]=true;q[++R]=v;
}
}
q[L=R=1]=s;v2[s]=true;
while(L<=R){
ui u=q[L++];
for(ui v,E=h[1][u];E;E=e[1][E].nx)if(!v2[v=e[1][E].v]){
v2[v]=true;q[++R]=v;
}
}
for(ui i=1;i<=n;++i)if(!v1[i]||!v2[i]){
for(ui E=h[0][i];E;E=e[0][E].nx)--deg[e[0][E].v];
}
dp[t]=1;q[L=R=1]=t;
while(L<=R){
ui u=q[L++];
if(u!=t)dp[u]=1ull*dp[u]*inv[d[u]]%mod;
for(ui v,E=h[0][u];E;E=e[0][E].nx)if(v=e[0][E].v,v1[v]&&v2[v]){
dp[v]=(dp[v]+dp[u])%mod;
if(!--deg[v])q[++R]=v;
}
}
printf("%u",1ull*ans*(1+1ull*inv[d[t]]*(1+mod-dp[s])%mod)%mod);
}

LGP3244题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. nginx实现跨域访问并支持(GET, POST,PUT,DELETE, OPTIONS)

    最近有同事提出在使用客户端跨域访问的时候,发现服务器对option请求返回了403,后来查看了网络添加了一段配置,发现option服务返回204了,但是后续的put操作也直接返回了204导致无法使用图 ...

  2. webpack4 mini-css-extract-plugin

    在使用webpack的extract-text-webpack-plugin插件提取单独打包css文件时,报错,说是这个插件要依赖webpack3的版本. webpack4得使用mini-css-ex ...

  3. 学习jsp篇:jsp简单实例之二登录

    编程环境:IDEA,Tomcat,JavaEE 一.实例二登录 1.在自己建的工程下的web目录下建一个文件夹为login,在login中编写登录代码(其实就是和实例一同一个项目) 2.先建登录页面j ...

  4. 范数||x||(norm)笔记

    1. 范数的含义和定义 范数是具有"长度"概念的函数.在线性代数.泛函分析及相关领域,是一个函数,它为向量空间内的所有向量赋予非零的正的长度或大小.另一方面,半范数可以为非零的向量 ...

  5. Spring中@Autowired 注解的注入规则

    默认根据类型,匹配不到则根据bean名字 1.声明一个service接口 public interface HelloService { void sayHello(); } 2.service接口的 ...

  6. Solution -「BZOJ 4316」小C的独立集

    \(\mathcal{Description}\)   Link.   求包含 \(n\) 个结点 \(m\) 条边的仙人掌的最大独立集.   \(n\le5\times10^4\),\(m\le6\ ...

  7. Linux系统安装tomcat9服务(含jdk的安装)

    使用虚拟机上CentOS8系统. 1.安装tomcat的依赖jdk版本11 将jdk11解压至相应目录: 设置环境变量: 末尾添加: 更新配置文件: 验证: 补充使用yum安装jdk的方式: 1)查看 ...

  8. 1、Oauth概念与模式

    参考 OAuth 2.0 的一个简单解释

  9. AFNetworking 修改

    相比大家刚刚拿到AFNetworking  post  和 get 请求数据的时候都会有些小问题吧 NSLocalizedDescription=Request failed: unacceptabl ...

  10. 思科VTP协议(后面有配置案例)

    一.VTP相关理论介绍 1.1 VTP(VLAN trunking protocol)协议是用来在整个交换网络中分发和同步VLAN数据库的,是一个二层协议,思科私有协议. 1.2 VTP域是由一台或者 ...