题目链接:落忆枫音

  以下内容参考PoPoQQQ大爷的博客

  首先我们先来考虑一下如果没有新加入的那条边,答案怎么算。

  由于这是一个\(DAG\),所以我们给每个点随便选择一条入边,最后一定会构成一个树形图。于是答案就是除\(1\)号点之外所有点的入度之积。

  现在新加入了一条边,如果形成了一个环并且\(1\)号点不在环上的话,我们给每个点随便选择入边,就可能会出现选出一个环的情况。

  所以,我们需要考虑把这部分答案给掉。令\(S_{x\to y}\)表示\(x\)到\(y\)的任意一条路径,\(degree_u\)表示点\(u\)的入度,不难发现,我们要减去的答案就是:

\(\sum_{S_{y\to x}}\prod_{u\notin S}degree_u\)

  然后我们就可以\(dp\)了。令\(f_i\)表示\(\sum_{S_{i\to x}}\prod_{u\notin S}degree_u\),那么转移就很好转了。注意边界是\(f_x\)。

  下面贴代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define mod 1000000007
#define maxn 100010
#define maxm 400010 using namespace std;
typedef long long llg; int n,m,du[maxn];
int head[maxn],next[maxm],to[maxm],tt;
llg f[maxn],ans;
bool vis[maxn]; int getint(){
int w=0;bool q=0;
char c=getchar();
while((c>'9'||c<'0')&&c!='-') c=getchar();
if(c=='-') c=getchar(),q=1;
while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();
return q?-w:w;
} void gi(llg &x){if(x>=mod) x%=mod;}
llg mi(llg a,int b){
llg s=1;
while(b){
if(b&1) s=s*a,gi(s);
a=a*a,gi(a); b>>=1;
}
return s;
} llg dfs(int u){
if(vis[u]) return f[u]; vis[u]=1;
for(int i=head[u];i;i=next[i])
f[u]+=dfs(to[i]),gi(f[u]);
f[u]*=mi(du[u],mod-2);
gi(f[u]); return f[u];
} int main(){
File("maple");
n=getint(); m=getint();
int x=getint(),y=getint();
while(m--){
int u=getint(),v=getint(); du[v]++;
to[++tt]=v;next[tt]=head[u];head[u]=tt;
}
du[y]++; ans=1;
for(int i=2;i<=n;i++) ans*=du[i],gi(ans);
if(y!=1 && x!=1){
vis[x]=1; f[x]=ans*mi(du[x],mod-2);
gi(f[x]); ans-=dfs(y);
ans%=mod; if(ans<0) ans+=mod;
}
printf("%lld\n",ans);
return 0;
}

最新文章

  1. js 闭包
  2. html自我设计login登录
  3. Docker入门教程(五)Docker安全
  4. sublime text 3 package control
  5. Sring控制反转(Inversion of Control,Ioc)也被称为依赖注入(Dependency Injection,DI)原理用反射和代理实现
  6. [转载]jQuery.extend 函数详解
  7. chage命令管理用户口令时效
  8. HTML浅识
  9. cf B. Simple Molecules
  10. java一点东西(3)
  11. nginx 目录密码保护的设置方法
  12. Autolayout 第三方开源库
  13. IOS Cell 重影
  14. ionic3 笔记
  15. 我的Lambda的学习笔记
  16. java程序员的NodeJS初识篇
  17. Jenkins持续集成学习-Windows环境进行.Net开发2
  18. vue-cli脚手架之webpack.prod.conf.js
  19. dockerfile简述
  20. jQuery.data() 的实现方式,jQuery16018518865841457738的由来,jQuery后边一串数字的由来

热门文章

  1. c# 计算文字高度
  2. java的Result类
  3. gradle多项目构建及依赖
  4. SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]
  5. go 工具链目前[不支持编译 windows 下的动态链接库]解决方案
  6. apidemos编译出错
  7. Mixed Content: The page at &#39;https://a.t.com/login&#39; was loaded over HTTPS, but requested an insecure stylesheet 非全站https
  8. flask的session用法2
  9. Monkey Tradition---LightOj1319(中国剩余定理模板)
  10. 洛谷P3939 数颜色 二分查找