BZOJ 4011 HNOI2015 落忆枫音 拓扑序DP
来源:互联网 发布:mac os x 虚拟机 编辑:程序博客网 时间:2024/05/18 20:11
题目大意:给定一张有向无环图,现在要求加入一条边,求加入后以1为根的树形图个数
首先不考虑加入的这条边,那么这个图是一个DAG
由朱刘算法的推论可知,如果除根节点外每个点都选择一条入边,由于没有环,因此一定会形成一个树形图
因此答案就是
现在加入这条边之后,我们仍然可以套用这个公式,但是这样就会有一些不合法的方案被统计进来,我们需要把这些不合法的方案减掉
一个方案如果不合法,那么一定会形成一个环,而环一定包含新加入的那条边
因此我们减掉的方案其实是:
然后我们就可以DP了
令
那么有动规方程
初值
注意
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 200200#define MOD 1000000007using namespace std;struct abcd{ int to,next;}table[M];int head[M],tot;int n,m,s,t;int degree[M],_degree[M];long long inv[M],f[M],ans=1;void Add(int x,int y){ table[++tot].to=y; table[tot].next=head[x]; head[x]=tot;}void Linear_Shaker(){ int i; for(inv[1]=1,i=2;i<=m+1;i++) inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;}void Topology_Sort(){ static int q[M]; int i,r=0,h=0; f[t]=ans; for(i=1;i<=n;i++) if(!degree[i]) q[++r]=i; while(r!=h) { int x=q[++h]; (f[x]*=inv[_degree[x]])%=MOD; for(i=head[x];i;i=table[i].next) { (f[table[i].to]+=f[x])%=MOD; if(!--degree[table[i].to]) q[++r]=table[i].to; } }}int main(){ int i,x,y; cin>>n>>m>>s>>t; Linear_Shaker(); for(i=1;i<=m;i++) { scanf("%d%d",&x,&y); Add(x,y); degree[y]++; _degree[y]++; } _degree[t]++; for(i=2;i<=n;i++) (ans*=_degree[i])%=MOD; if(t==1) { cout<<ans<<endl; return 0; } Topology_Sort(); cout<<(ans-f[s]+MOD)%MOD<<endl; return 0;}
0 0
- BZOJ 4011 HNOI2015 落忆枫音 拓扑序DP
- bzoj 4011: [HNOI2015]落忆枫音 拓扑序dp+容斥原理
- BZOJ 4011: [HNOI2015]落忆枫音 朱刘算法推论 拓扑图dp
- [朱刘算法推论 拓扑序DP] BZOJ4011 [HNOI2015]落忆枫音
- BZOJ 4011: [HNOI2015]落忆枫音
- 【BZOJ 4011】 [HNOI2015]落忆枫音
- BZOJ 4011 HNOI2015 落忆枫音
- BZOJ 4011: [HNOI2015]落忆枫音
- BZOJ 4011 [HNOI2015]落忆枫音
- BZOJ 4011 [HNOI2015] 落忆枫音
- 【BZOJ4011】【HNOI2015】落忆枫音 拓扑图DP,
- [BZOJ4011]HNOI2015落叶枫音|拓扑序DP
- bzoj 4011: [HNOI2015]落忆枫音 递推
- BZOJ 4010 [HNOI2015]菜肴制作 拓扑排序
- BZOJ 4010 [HNOI2015]菜肴制作 拓扑排序
- [HNOI2015]菜肴制作 拓扑序
- BZOJ 4008 HNOI2015 亚瑟王 期望DP
- bzoj 4008 [HNOI2015]亚瑟王 期望dp
- 时代在前进——我的方向
- 第三章 第12题
- 谈一谈做iOS播放器库开发所涉及的知识点
- Makefile 学习
- SVN版本控制软件
- BZOJ 4011 HNOI2015 落忆枫音 拓扑序DP
- Android 带圆点的自动轮播
- 【tcp-ip学习总结】socket编程基础/网络编程基础
- unpivot转多列并包含多个名称
- SQL注意细节
- LoadRunner 之调用Linux下loadgenerate 方案
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- 安胜安全操作系统的隐蔽通道场景演示【进程标识符信道】
- jQuery+ajax+jsonp+Java跨域访问原理和实例