原题戳我

Solution:

(部分复制Navi_Aswon博客)

解释博客中的两个小地方:

\[\sum_{\left(S是G中y→x的一条路径的点集\right))}\prod_{2≤j≤n,(j∉S)}degree_j\]

  • 因为加了\(x\)到\(y\)这条边出现了环,所以环上一定有一条边是从\(x\)连向\(y\),所以在没有这条边时,能从\(y\)连向\(x\)的方案都是不满足的。
  • 因此,上面这个式子就是找出了一条从\(y\)至\(x\)的路径后,连边的方案数。可以看作,\(y\)到\(x\)路径上的所有边都固定只连向环中的下一个点,所以方案数就是其他不在环上的点的入度乘积

\[f_i=\frac{∑\left(j→i\right)*f_j}{degree_i}\]

  • 这个式子用\(degree\)总乘积除掉环路径上的点后的乘积之和,也就是不同环到这个点来后的方案和,所以最后\(f[x]\)就是所有存在环的方案数。注意的理解的点就是,\(f[ ]\)不是一个固定的环存在的不能满足方案数,而是所有环的情况方案数之和

  • 另外还用到了费马小定律求逆元,\(1e9+7\)是质数

是一道需要好好理解好好思考的题目


Code:

//It is coded by Ning_Mew on 3.17
#include<bits/stdc++.h>
#define LL long longusing namespace std;const int maxn=1e5+7;
const int MOD=1e9+7;int n,m,x,y;
int head[maxn],cnt=0;
struct Edge{int nxt,to;
}edge[2*maxn];
int degree[maxn],in[maxn];
LL ans=0,f[maxn];void add(int from,int to){edge[++cnt].nxt=head[from];edge[cnt].to=to;head[from]=cnt;
}
LL q_pow(int x,int k){LL box=1ll*x,ans=1;while(k){if(k%2)ans=ans*box%MOD;box=box*box%MOD;k=k/2;}return ans;
}
void topsort(){queue<int>q;while(!q.empty())q.pop();for(int i=1;i<=n;i++){if(in[i]==0)q.push(i);}while(!q.empty()){int u=q.front();q.pop();f[u]=f[u]*q_pow(degree[u],MOD-2)%MOD;for(int i=head[u];i!=0;i=edge[i].nxt){int v=edge[i].to;in[v]--;f[v]=(f[v]+f[u])%MOD;if(in[v]==0)q.push(v);}}return;
}
int main(){scanf("%d%d%d%d",&n,&m,&x,&y);degree[y]++;for(int i=1;i<=m;i++){int a,b;scanf("%d%d",&a,&b);add(a,b);degree[b]++;}ans=1;for(int i=2;i<=n;i++){in[i]=degree[i];ans=1ll*ans*degree[i]%MOD;}in[1]=degree[1];in[y]--; f[y]=ans;if(y!=1)topsort();printf("%lld\n",(ans-f[x]+MOD)%MOD);return 0;
}

转载于:https://www.cnblogs.com/Ning-Mew/p/8588574.html

【题解】 [HNOI2015]落忆枫音 (拓扑排序+dp+容斥原理)相关推荐

  1. P3244 [HNOI2015]落忆枫音(DAG上的动态规划问题,朱刘定理,乘法逆元)

    P3244 [HNOI2015]落忆枫音 样例太坑了!竟然和题目描述给的图不一样! 题目描述 给定一张有向无环图,这张图满足一个性质:以点1为根节点,保证至少有一棵有向树,连接所有的节点. 现在向这张 ...

  2. Bzoj4011 [HNOI2015]落忆枫音

    Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 983  Solved: 533 Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫 ...

  3. 洛谷 P3244 / loj 2115 [HNOI2015] 落忆枫音 题解【拓扑排序】【组合】【逆元】

    组合计数的一道好题.什么非主流题目 题目背景 (背景冗长请到题目页面查看) 题目描述 不妨假设枫叶上有 \(n​\) 个穴位,穴位的编号为 \(1\sim n​\).有若干条有向的脉络连接着这些穴位. ...

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

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

  5. [HNOI2015] 落忆枫音

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

  6. luogu P3244 [HNOI2015]落忆枫音

    传送门 md这题和矩阵树定理没半毛钱关系qwq 首先先不考虑有环,一个\(DAG\)个外向树个数为\(\prod_{i=2}^{n}idg_i(\)就是\(indegree_i)\),因为外向树每个点 ...

  7. bzoj4011[HNOI2015]落忆枫音

    http://www.lydsy.com/JudgeOnline/problem.php?id=4011 记新加入的边的起点为$x$,终点为$y$ 首先,我们先考虑新加入的边没有构成环的情况,即在原图 ...

  8. [HNOI2015]落忆枫音

    题目描述 不妨假设枫叶上有 n个穴位,穴位的编号为 1 ~  n.有若干条有向的脉络连接 着这些穴位.穴位和脉络组成一个有向无环图--称之为脉络图(例如图 1),穴 位的编号使得穴位 1 没有从其他穴 ...

  9. luogu3244 bzoj4011 HNOI2015 落忆枫音

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

最新文章

  1. html如何给文字添加阴影效果,css中怎么给字体添加阴影效果
  2. 华为鸿蒙去哪里更新,华为鸿蒙OS正式尝鲜版名单更新,升级?还是不升级?
  3. discuz!x3 门户友情链接模块的横排显示
  4. ssh端口映射,本地转发
  5. 微信公众号授权步骤详细步骤介绍和整合springboot开发(java版)
  6. node爬取某app数据_某APP次日留存数据报告
  7. 怀旧服推荐配置_【怀旧服】狂暴战P4毕业装备推荐
  8. MS Script Control的 COM
  9. 【OpenCV】OpenCV实战从入门到精通之 -- 图像对比度、亮度值调整
  10. VC消息传递(对话框间传递参数)
  11. 37岁程序员被裁!120天找不到工作?不想被淘汰,这可能是你最后的机会
  12. linux编译安装慢,解决 Linux 下 Jenkins 安装插件很慢的问题
  13. AB PLC软件如何授权或者破解
  14. Kali linux 学习笔记(十三)主动信息收集——端口扫描(UDP扫描、TCP扫描) 2020.2.22
  15. 多益网络校招 —— web前端笔试题
  16. 新唐(nuvoton)单片机学习资料汇总
  17. 服务器413是什么状态,服务器异常代码413问题
  18. 微信小程序的图片预加载处理
  19. Mybatis-Plus如何使用
  20. 2020-7-3中兴IC开发设计师 专业面,

热门文章

  1. XE3随笔6:SuperObject 的 JSON 对象中还可以包含 方法
  2. c# 第六课 linq
  3. 卓越软件工程--《微软360度》读后感
  4. 客户端脚本验证码总结一
  5. idea项目依赖导入失败_解决idea导入项目后依赖报错问题
  6. 行内块元素有哪些标签_html的行内元素与块级元素总结
  7. mysql keepalived_mysql高可用+keepalived
  8. datagrid分页传递参数_四类数据库分页实现方案总结之Mysql分页实现
  9. matlab高斯消去,高斯消去、追赶法 matlab
  10. 设置读取plc时间_最简单的一种方法来step7 读取PLC时间日期