【题解】 [HNOI2015]落忆枫音 (拓扑排序+dp+容斥原理)
原题戳我
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+容斥原理)相关推荐
- P3244 [HNOI2015]落忆枫音(DAG上的动态规划问题,朱刘定理,乘法逆元)
P3244 [HNOI2015]落忆枫音 样例太坑了!竟然和题目描述给的图不一样! 题目描述 给定一张有向无环图,这张图满足一个性质:以点1为根节点,保证至少有一棵有向树,连接所有的节点. 现在向这张 ...
- Bzoj4011 [HNOI2015]落忆枫音
Time Limit: 10 Sec Memory Limit: 512 MB Submit: 983 Solved: 533 Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫 ...
- 洛谷 P3244 / loj 2115 [HNOI2015] 落忆枫音 题解【拓扑排序】【组合】【逆元】
组合计数的一道好题.什么非主流题目 题目背景 (背景冗长请到题目页面查看) 题目描述 不妨假设枫叶上有 \(n\) 个穴位,穴位的编号为 \(1\sim n\).有若干条有向的脉络连接着这些穴位. ...
- BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂--我们也 ...
- [HNOI2015] 落忆枫音
题目描述 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂......我们也不可能再 ...
- luogu P3244 [HNOI2015]落忆枫音
传送门 md这题和矩阵树定理没半毛钱关系qwq 首先先不考虑有环,一个\(DAG\)个外向树个数为\(\prod_{i=2}^{n}idg_i(\)就是\(indegree_i)\),因为外向树每个点 ...
- bzoj4011[HNOI2015]落忆枫音
http://www.lydsy.com/JudgeOnline/problem.php?id=4011 记新加入的边的起点为$x$,终点为$y$ 首先,我们先考虑新加入的边没有构成环的情况,即在原图 ...
- [HNOI2015]落忆枫音
题目描述 不妨假设枫叶上有 n个穴位,穴位的编号为 1 ~ n.有若干条有向的脉络连接 着这些穴位.穴位和脉络组成一个有向无环图--称之为脉络图(例如图 1),穴 位的编号使得穴位 1 没有从其他穴 ...
- luogu3244 bzoj4011 HNOI2015 落忆枫音
这道题目题面真长,废话一堆. 另外:这大概是我第一道独立做出来的HNOI2011年以后的题目了吧.像我水平这么差的都能做出来,dalao您不妨试一下自己想想? 题目大意:给一个DAG,其中1号点没有入 ...
最新文章
- html如何给文字添加阴影效果,css中怎么给字体添加阴影效果
- 华为鸿蒙去哪里更新,华为鸿蒙OS正式尝鲜版名单更新,升级?还是不升级?
- discuz!x3 门户友情链接模块的横排显示
- ssh端口映射,本地转发
- 微信公众号授权步骤详细步骤介绍和整合springboot开发(java版)
- node爬取某app数据_某APP次日留存数据报告
- 怀旧服推荐配置_【怀旧服】狂暴战P4毕业装备推荐
- MS Script Control的 COM
- 【OpenCV】OpenCV实战从入门到精通之 -- 图像对比度、亮度值调整
- VC消息传递(对话框间传递参数)
- 37岁程序员被裁!120天找不到工作?不想被淘汰,这可能是你最后的机会
- linux编译安装慢,解决 Linux 下 Jenkins 安装插件很慢的问题
- AB PLC软件如何授权或者破解
- Kali linux 学习笔记(十三)主动信息收集——端口扫描(UDP扫描、TCP扫描) 2020.2.22
- 多益网络校招 —— web前端笔试题
- 新唐(nuvoton)单片机学习资料汇总
- 服务器413是什么状态,服务器异常代码413问题
- 微信小程序的图片预加载处理
- Mybatis-Plus如何使用
- 2020-7-3中兴IC开发设计师 专业面,
热门文章
- XE3随笔6:SuperObject 的 JSON 对象中还可以包含 方法
- c# 第六课 linq
- 卓越软件工程--《微软360度》读后感
- 客户端脚本验证码总结一
- idea项目依赖导入失败_解决idea导入项目后依赖报错问题
- 行内块元素有哪些标签_html的行内元素与块级元素总结
- mysql keepalived_mysql高可用+keepalived
- datagrid分页传递参数_四类数据库分页实现方案总结之Mysql分页实现
- matlab高斯消去,高斯消去、追赶法 matlab
- 设置读取plc时间_最简单的一种方法来step7 读取PLC时间日期