[朱刘算法推论 拓扑序DP] BZOJ4011 [HNOI2015]落忆枫音
2016-03-15 10:39
369 查看
传送门:/article/2348605.html
很文艺的题目
朱刘算法的推论 如果除根节点外每个点都选择一条入边,由于没有环,因此一定会形成一个树形图
去掉多余情况的过程是个拓扑序DP
很文艺的题目
朱刘算法的推论 如果除根节点外每个点都选择一条入边,由于没有环,因此一定会形成一个树形图
去掉多余情况的过程是个拓扑序DP
#include<cstdio> #include<cstdlib> #include<algorithm> #define V G[p].v #define Mod 1000000007 using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++; } inline void read(int &x) { char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } ll inv[200005]; inline void Pre(){ inv[1]=1; for (int i=2;i<=200001;i++) (inv[i]=(Mod-Mod/i)*inv[Mod%i])%=Mod; } struct edge{ int u,v; int next; }; edge G[200005]; int head[100005],inum; inline void add(int u,int v,int p){ G[p].u=u; G[p].v=v; G[p].next=head[u]; head[u]=p; } int lst[100005],icnt; int vst[100005]; inline void dfs(int u) { vst[u]=1; for (int p=head[u];p;p=G[p].next) if (!vst[V]) dfs(V); lst[++icnt]=u; } int n,m,x,y; int deg[100005]; ll f[100005]; int main() { int _u,_v; Pre(); freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(n); read(m); read(x); read(y); for (int i=1;i<=m;i++) read(_u),read(_v),add(_u,_v,++inum),deg[_v]++; deg[y]++; ll ans=1; for (int i=2;i<=n;i++) (ans*=deg[i])%=Mod; if (y==1) return printf("%lld\n",ans),0; dfs(1); reverse(lst+1,lst+n+1); f[y]=ans; for (int i=1;i<=n;i++) { int u=lst[i]; (f[u]*=inv[deg[u]])%=Mod; for (int p=head[u];p;p=G[p].next) (f[V]+=f[u])%=Mod; } (((ans-=f[x])%=Mod)+=Mod)%=Mod; printf("%lld\n",ans); }
相关文章推荐
- 将json字符串中数组节点转换为泛型list集合(gson)
- js基础知识复习
- 【BZOJ2883】gss2加强版
- 移动端H5各种各样的列表的制作方法(四) by FungLeo
- eq相等 ,ne、neq不相等 EL表达式
- 见过的最好AWK手册
- 使用 ImageLoader报 UIL doesn't support scheme(protocol) by default 错误
- Java 入门 之 HTTP 的 GET & POST 方法
- 剑指offer-数字在排序数组中出现的次数
- 05-图2. Saving James Bond - Easy Version (25)
- Android 滑动冲突处理
- Win10 安装 及应用遇到的问题
- java内容介绍
- select、poll、epoll之间的区别总结[整理]
- 排序总结
- getopt(分析命令行参数)
- 4417: [Shoi2013]超级跳马|DP+矩阵快速幂
- 单片机C语言中define的妙用
- 基于go-ceph创建CEPH块设备及快照
- C++笔试题(十)