[HNOI2015]落忆枫音

设每个点入度是\(d_i\),如果不加边,答案是

\[\prod_{i=2}^nd_i
\]

意思是我们给每个点选一个父亲

然后我们加了一条边,最后如果还这么统计,那么有一些不合法的图是\(y,\dots,x\)形成了一个环,考虑把所有环的方案减掉。

考虑枚举环上的点集\(S\),答案为

\[\sum_S\prod_{i\notin s}d_i
\]

意思是环上的点钦定父亲,其他的点照旧统计

这个方案数可以dp,设\(dp_i\)表示\(i,\dots,x\)形成的环的答案

那么初始值有

\[dp_x=\prod_{i\not=x}d_i
\]

然后每个点加入环的时候除上自己的入度,也就是

\[dp_u=\frac{\sum\limits_{(u,v)\in E}dp_v}{d_u}
\]

然后这个dp直接在topo图上记搜就可以了


Code:

#include <cstdio>
#include <cctype>
#include <cstring>
const int mod=1e9+7;
const int N=1e5+10;
template <class T>
void read(T &x)
{
x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
}
int head[N],to[N<<1],Next[N<<1],cnt;
void addedge(int u,int v)
{
to[++cnt]=v,Next[cnt]=head[u],head[u]=cnt;
}
inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
#define mul(a,b) (1ll*(a)*(b)%mod)
int qp(int d,int k){int f=1;while(k){if(k&1)f=mul(f,d);d=mul(d,d),k>>=1;}return f;}
int dp[N],d[N];
int dfs(int now)
{
if(~dp[now]) return dp[now];
dp[now]=0;
for(int v,i=head[now];i;i=Next[i])
dfs(v=to[i]),dp[now]=add(dp[now],dp[v]);
dp[now]=mul(dp[now],qp(d[now],mod-2));
return dp[now];
}
int main()
{
int n,m,y,x;
read(n),read(m),read(y),read(x);
memset(dp,-1,sizeof dp);
dp[y]=1;
for(int u,v,i=1;i<=m;i++)
{
read(u),read(v);
addedge(u,v);
++d[v];
}
int ans=1;
for(int i=2;i<=n;i++)
{
if(i==x) ans=mul(ans,d[i]+1);
else ans=mul(ans,d[i]);
dp[y]=mul(dp[y],d[i]);
}
if(x==1) return printf("%d\n",ans),0;
dp[y]=mul(dp[y],qp(d[y],mod-2));
ans=add(ans,mod-dfs(x));
printf("%d\n",ans);
return 0;
}

2019.2.25

[HNOI2015]落忆枫音 解题报告的更多相关文章

  1. BZOJ 4011: [HNOI2015]落忆枫音( dp )

    DAG上有个环, 先按DAG计数(所有节点入度的乘积), 然后再减去按拓扑序dp求出的不合法方案数(形成环的方案数). ---------------------------------------- ...

  2. bzoj4011[HNOI2015]落忆枫音 dp+容斥(?)

    4011: [HNOI2015]落忆枫音 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1125  Solved: 603[Submit][Statu ...

  3. 4011: [HNOI2015]落忆枫音

    4011: [HNOI2015]落忆枫音 链接 分析: 原来是一个DAG,考虑如何构造树形图,显然可以给每个点找一个父节点,所以树形图的个数就是$\prod\limits_u deg[u]$. 那么加 ...

  4. BZOJ4011: [HNOI2015]落忆枫音

    Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题.  「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们 ...

  5. [HNOI2015]落忆枫音

    题目描述 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂......我们也不可能再 ...

  6. BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)

    Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题.  「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们也 ...

  7. BZOJ 4011: [HNOI2015]落忆枫音 计数 + 拓扑排序

    Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题.  「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们 ...

  8. [bzoj4011] [洛谷P3244] [HNOI2015] 落忆枫音

    Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂--我们也 ...

  9. luogu3244 bzoj4011 HNOI2015 落忆枫音

    这道题目题面真长,废话一堆. 另外:这大概是我第一道独立做出来的HNOI2011年以后的题目了吧.像我水平这么差的都能做出来,dalao您不妨试一下自己想想? 题目大意:给一个DAG,其中1号点没有入 ...

随机推荐

  1. 异常:fatal: unable to access 'https://git.oschina.net/pcmpcs/library.git/': Could not resolve host

    git  fork项目时出现的异常. 原因: 我以前用的是ssh地址做的远程通信地址,而这次是用的是https,因为很久没用,所以忘记了以前是用ssh的了.解决方案一:复制ssh协议的地址,然后再关联 ...

  2. HTML 5 Web 音频

    HTML 5 音频http://www.w3school.com.cn/html5/html_5_audio.asp 在 Web 上播放音频http://www.w3school.com.cn/med ...

  3. h5-语义化标签

    ###1.语义化标签 在h5之前,在开发过程中大量div的id名称重复,例如div id="footer"来标记页脚内容,所以html5元素引入了语义化标签(一组新的片段类元素)  ...

  4. day 7-3 僵尸进程,孤儿进程与守护进程

    一.基本定义 正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 当一个 进程完成它的工作终止之后,它 ...

  5. CentOS6.8 安装配置Mysql

    1.下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2.安装mysql-commun ...

  6. shell中数组及其相关操作

    转载 https://blog.csdn.net/jerry_1126/article/details/52027539

  7. 老男孩python学习自修第十一天【内置函数】

    1.基本内置函数 help() 帮助文档 dir() 列出当前文件的所有变量和方法 vars() 列出当前文件的所有变量及其值 type() 返回变量的类型 id() 返回变量的内存地址 len() ...

  8. Java使用RabbitMQ之公平分发

    发送消息: package org.study.workfair; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Con ...

  9. Lambda表达式Contains方法(等价于SQL语句中的like)使用注意事项

    貌似已经半年多没写一篇帖子了,充分的说明要么老总一天折腾的让人心齐疲惫,没心情去写:要么另外一种可能就是自己不思进取,说白了就是懒.好在这种状态在今天被打破了.MoNey加油. 众所周知,想在Enti ...

  10. GA-H61M-DS2 BIOS SETTING

    Boot Option #1,UEFI:Sandisk SDSSDHP128G Boot Option #2, Boot Option #3, Boot Option #4, Bootup Numbe ...