BZOJ 4011 【HNOI2015】 落忆枫音
2024-09-11 15:23:17
题目链接:落忆枫音
以下内容参考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;
}
最新文章
- js 闭包
- html自我设计login登录
- Docker入门教程(五)Docker安全
- sublime text 3 package control
- Sring控制反转(Inversion of Control,Ioc)也被称为依赖注入(Dependency Injection,DI)原理用反射和代理实现
- [转载]jQuery.extend 函数详解
- chage命令管理用户口令时效
- HTML浅识
- cf B. Simple Molecules
- java一点东西(3)
- nginx 目录密码保护的设置方法
- Autolayout 第三方开源库
- IOS Cell 重影
- ionic3 笔记
- 我的Lambda的学习笔记
- java程序员的NodeJS初识篇
- Jenkins持续集成学习-Windows环境进行.Net开发2
- vue-cli脚手架之webpack.prod.conf.js
- dockerfile简述
- jQuery.data() 的实现方式,jQuery16018518865841457738的由来,jQuery后边一串数字的由来
热门文章
- c# 计算文字高度
- java的Result类
- gradle多项目构建及依赖
- SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]
- go 工具链目前[不支持编译 windows 下的动态链接库]解决方案
- apidemos编译出错
- Mixed Content: The page at &#39;https://a.t.com/login&#39; was loaded over HTTPS, but requested an insecure stylesheet 非全站https
- flask的session用法2
- Monkey Tradition---LightOj1319(中国剩余定理模板)
- 洛谷P3939 数颜色 二分查找