[HNOI2015]落忆枫音 解题报告
[HNOI2015]落忆枫音
设每个点入度是\(d_i\),如果不加边,答案是
\]
意思是我们给每个点选一个父亲
然后我们加了一条边,最后如果还这么统计,那么有一些不合法的图是\(y,\dots,x\)形成了一个环,考虑把所有环的方案减掉。
考虑枚举环上的点集\(S\),答案为
\]
意思是环上的点钦定父亲,其他的点照旧统计
这个方案数可以dp,设\(dp_i\)表示\(i,\dots,x\)形成的环的答案
那么初始值有
\]
然后每个点加入环的时候除上自己的入度,也就是
\]
然后这个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]落忆枫音 解题报告的更多相关文章
- BZOJ 4011: [HNOI2015]落忆枫音( dp )
DAG上有个环, 先按DAG计数(所有节点入度的乘积), 然后再减去按拓扑序dp求出的不合法方案数(形成环的方案数). ---------------------------------------- ...
- bzoj4011[HNOI2015]落忆枫音 dp+容斥(?)
4011: [HNOI2015]落忆枫音 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1125 Solved: 603[Submit][Statu ...
- 4011: [HNOI2015]落忆枫音
4011: [HNOI2015]落忆枫音 链接 分析: 原来是一个DAG,考虑如何构造树形图,显然可以给每个点找一个父节点,所以树形图的个数就是$\prod\limits_u deg[u]$. 那么加 ...
- BZOJ4011: [HNOI2015]落忆枫音
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们 ...
- [HNOI2015]落忆枫音
题目描述 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂......我们也不可能再 ...
- BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们也 ...
- BZOJ 4011: [HNOI2015]落忆枫音 计数 + 拓扑排序
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们 ...
- [bzoj4011] [洛谷P3244] [HNOI2015] 落忆枫音
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂--我们也 ...
- luogu3244 bzoj4011 HNOI2015 落忆枫音
这道题目题面真长,废话一堆. 另外:这大概是我第一道独立做出来的HNOI2011年以后的题目了吧.像我水平这么差的都能做出来,dalao您不妨试一下自己想想? 题目大意:给一个DAG,其中1号点没有入 ...
随机推荐
- WebSocket实现一个聊天室
聊天室页面-->index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
- jmeter 连接数据库测试笔记
JDBC 常用mysql和oracal的jar包下载地址.jdbc driver class配置参考我的博客https://www.cnblogs.com/jackzz/p/9998975.html ...
- springboot 整合spark-sql报错
Exception in thread "main" org.spark_project.guava.util.concurrent.ExecutionError: java.la ...
- vue二次实战(二)
https://www.cnblogs.com/jellify/p/9522477.html install的弹出框中输入sublimeTmpl,找到sublimeTmpl这个插件后回车 Vue路由 ...
- snv的使用
1.搭建SVN服务器 (1)直接安装 (2)创建工号,分组,分配权限(图形化界面的直接操作,非图形界面的需要改配置文件conf文件夹下) (3)创建仓库,D:\Repositories\OA:cmd命 ...
- ConnectTimeout和ReadTimeout所代表的意义
参考:ConnectTimeout和ReadTimeout所代表的意义 ConnectTimeout 指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间. 在java中,网络状况 ...
- mvn clean deploy
如果是 mthrift的话,需要部署,就用 mvn clean deploy; 先进入 cd qcs.appeal.client ,然后执行:mvn clean deploy;
- C# json解析
json格式数 [{ , , , "ItemCode": "UBAC11211OF-A54", "basicName_bg": " ...
- 注解方式过滤器(Filter)不能过滤Servlet的问题
https://www.aliyun.com/jiaocheng/778495.html 今天写filter(过滤器)的时候,碰到一个奇怪的问题,发现filter可以过滤urlPatterns,但是无 ...
- Lodop“对象不支持SET__LICENSES属性或方法”SET__LICENSES is not a function”
Lodop中的方法如果书写错误,就会报错:“对象不支持XXX属性或方法”调试JS会报错”SET__LICENSES is not a function” LODOP.SET_LICENSES是加注册语 ...