[HNOI2015]落忆枫音
时间:2019-09-08
本文章向大家介绍[HNOI2015]落忆枫音,主要包括[HNOI2015]落忆枫音使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
对于一个\(\rm DAG\)答案非常显然,就是除去\(1\)以外所有节点入度的乘积
矩阵树定理显然是可以证明的,但是一个更为直观的理解方法就是对于每一个点从能到达它的点中找一个父亲
加上这条边之后,我们还是先求出所有节点入度的乘积,显然这样算出来的并不全是外向树,还有一些奇怪的环状物
考虑减掉这些环状物的影响
我们从图里搜出一个\(k\)个节点的环,我们强行使得这个环作为那个环状物,之后对于不在环里的点,其还是从能到达它的点里选一个作为父亲,于是带有这个环的情况就是
\[\frac{\prod_{i=1}^nr_i}{\prod_{i=1}^kr_{a_i}}\]
直接记搜搜出所有环算贡献即可
代码
#include<bits/stdc++.h>
#define re register
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=1e5+5;
const int mod=1e9+7;
struct E{int v,nxt;}e[maxn<<1];
int n,num,m,rx,ans,ry,vis[maxn],dp[maxn],head[maxn],r[maxn];
inline void add(int x,int y) {
e[++num].v=y;e[num].nxt=head[x];head[x]=num;
}
inline int ksm(int a,int b) {
int S=1;
for(;b;b>>=1,a=1ll*a*a%mod) if(b&1) S=1ll*S*a%mod;
return S;
}
int dfs(int x) {
if(vis[x]) return dp[x];
vis[x]=1;
if(x==rx) return dp[x]=ksm(r[x],mod-2);
for(re int i=head[x];i;i=e[i].nxt)
dp[x]=(dp[x]+dfs(e[i].v))%mod;
return dp[x]=1ll*dp[x]*ksm(r[x],mod-2)%mod;
}
int main() {
n=read();m=read(),rx=read(),ry=read();
for(re int x,y,i=1;i<=m;i++)
x=read(),y=read(),add(x,y),r[y]++;
r[ry]++;int ans=1;
for(re int i=2;i<=n;i++) ans=1ll*ans*r[i]%mod;
printf("%d\n",ry!=1?(ans-1ll*ans*dfs(ry)%mod+mod)%mod:ans);
return 0;
}
原文地址:https://www.cnblogs.com/asuldb/p/11488234.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于直播卖货系统平台在微信浏览器中音视频播放的问题
- python爬虫 scrapy爬虫框架的基本使用
- Python opencv图像处理基础总结(五) 图像金字塔 图像梯度 Canny算法边缘提取
- python scrapy爬虫练习(1) 爬取豆瓣电影top250信息
- python爬虫 senlenium爬取拉勾网招聘数据
- Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现
- 简单又强大的pandas爬虫 利用pandas库的read_html()方法爬取网页表格型数据
- python pyecharts数据可视化 折线图 箱形图
- Python爬虫 selenium自动化 利用搜狗搜索爬取微信公众号文章信息
- python 办公自动化系列 (1) 从22053条数据中统计断网次数并计算平均断网时间
- Python数据可视化 热力图
- python 中文情感分析 Snownlp库的使用
- Python数据分析实战(1) 成都土地市场分析
- 51单片机学习(1) LED点亮、闪烁以及流水灯实现
- python pyecharts地理数据可视化 绘制地理图表