题目


分析

每个有入度的点可以选择任意一个父节点组成一棵树,那么原来的答案就是 \(\prod_{i=2}^ndeg[i]\)

现在多了一条边,如果边的终点是1或者它是一个自环那么可以不用管这条边。

然后先把这条边加上再减去不合法的方案,可以发现不合法的方案就是选出任意一个环,它贡献的方案数就是 \(\Large \frac{\prod_{i=2}^ndeg[i]}{\prod_{i\in it}deg[i]}\)

那么设 \(dp[y]\) 表示 \(y\) 到 \(x\) 的环的方案数,\(dp[y]=\frac{1}{deg[y]}\sum{dp[y']}\)

\(dp[x]=\prod_{i=2}^ndeg[i]\),最后不合法的方案就是 \(dp[y]\)


代码

#include <cstdio>
#include <cctype>
using namespace std;
const int N=100011,mod=1000000007;
struct node{int y,next;}e[N<<1];
int dp[N],ieg[N],ans=1,v[N],sum=1,as[N],deg[N],n,m,X,Y;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
int ksm(int x,int y){
int ans=1;
for (;y;y>>=1,x=1ll*x*x%mod)
if (y&1) ans=1ll*ans*x%mod;
return ans;
}
void Mo(int &x,int y){x=x+y>=mod?x+y-mod:x+y;}
void dfs(int x){
if (v[x]) return;
v[x]=1;
for (int i=as[x];i;i=e[i].next)
dfs(e[i].y),Mo(dp[x],dp[e[i].y]);
dp[x]=1ll*dp[x]*ieg[x]%mod;
}
int main(){
n=iut(),m=iut(),X=iut(),Y=iut();
for (int i=1;i<=m;++i){
int x=iut(),y=iut();
e[i]=(node){y,as[x]},as[x]=i;
++deg[y];
}
if (X==Y||Y==1){
for (int i=2;i<=n;++i) ans=1ll*ans*deg[i]%mod;
return !printf("%d",ans);
}
for (int i=2;i<=n;++i){
sum=1ll*sum*deg[i]%mod;
if (i!=Y) ans=1ll*ans*deg[i]%mod;
}
ieg[1]=1,Mo(ans,sum);
for (int i=2;i<=n;++i) ieg[i]=1ll*ieg[i-1]*deg[i]%mod;
ieg[n]=ksm(ieg[n],mod-2);
for (int i=n,now=ieg[n];i>1;--i){
ieg[i]=1ll*ieg[i-1]*now%mod;
now=1ll*now*deg[i]%mod;
}
dp[X]=sum,dfs(Y),Mo(ans,mod-dp[Y]);
return !printf("%d",ans);
}

#dp#洛谷 3244 [HNOI2015]落忆枫音的更多相关文章

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

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

  2. 洛谷P3244 [HNOI2015]落忆枫音

    #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #in ...

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

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

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

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

  5. [HNOI2015]落忆枫音 解题报告

    [HNOI2015]落忆枫音 设每个点入度是\(d_i\),如果不加边,答案是 \[ \prod_{i=2}^nd_i \] 意思是我们给每个点选一个父亲 然后我们加了一条边,最后如果还这么统计,那么 ...

  6. 4011: [HNOI2015]落忆枫音

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

  7. 2018.07.13 [HNOI2015]落忆枫音(容斥原理+dp)

    洛谷的传送门 bzoj的传送门 题意简述:在DAG中增加一条有向边,然后询问新图中一共 有多少个不同的子图为"树形图". 解法:容斥原理+dp,先考虑没有环的情况,经过尝试不难发现 ...

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

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

  9. [HNOI2015]落忆枫音

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

  10. 【LG3244】[HNOI2015]落忆枫音

    题面 洛谷 题解 20pts 枚举每一条边是否在树中即可. 另10pts 我们考虑一张\(DAG\)中构成树的方法数,每个点选一个父亲即可,那么有 \[Ans=\prod_{i=1}^{n} deg_ ...

随机推荐

  1. os.path.relpath和os.path.basename,返回文件路径中的文件名

    from os import path print(path.relpath("/home/hpcadmin/lw/demo.py", start="/home/hpca ...

  2. 【ACM专项练习#02】整行字符串、输入vector、打印图形、处理n组数据以及链表操作等

    输入整行字符串 平均绩点 题目描述 每门课的成绩分为A.B.C.D.F五个等级,为了计算平均绩点,规定A.B.C.D.F分别代表4分.3分.2分.1分.0分. 输入 有多组测试样例.每组输入数据占一行 ...

  3. github.com/mitchellh/mapstructure 教程

    官网链接: github.com/mitchellh/mapstructure 本文只是简单的记录下 mapstructure 库的简单使用,想更加详细的学习,点击 Godoc 学习吧. 文中内容基本 ...

  4. 【架构师视角系列】QConfig配置中心系列之Server端(三)

    声明 原创文章,转载请标注.https://www.cnblogs.com/boycelee/p/17993697 <码头工人的一千零一夜>是一位专注于技术干货分享的博主,追随博主的文章, ...

  5. Linux系统查看主机性能

    查看主机的CPU性能: cat  /proc/cpuinfo cat /proc/meminfo |grep MemTotal    内存信息 查看物理cpu个数:cat /proc/cpuinfo ...

  6. 深入理解与应用CSS clip-path 属性

    clip-path clip-path是什么 clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐藏.通过定义这个剪切路径(clipping p ...

  7. 使用Deployment和Service实现简单的灰度发布

    在Kubernetes中,使用单个Service和多个Deployment来实现灰度发布的一种常见方法是利用标签(Labels)和选择器(Selectors)来控制哪些Pods接收来自Service的 ...

  8. pod探针的三种类型及三种检测方式

    Pod探针是Kubernetes中的一种机制,用于检测Pod中的容器是否正常运行.它主要有三种类型:存活探针(LivenessProbe).就绪探针(ReadinessProbe)和启动探针(Star ...

  9. 将谷歌chrome浏览器主题变黑的方法

    两个步骤: 第一: 桌面找到google chrome图标右键->属性,在后面加上: --force-dark-mode (注意有空格) 第二: 1.浏览器地址输入chrome://flags/ ...

  10. day06-JavaScript03

    JavaScript03 11.DOM 官方文档:https://www.w3school.com.cn/js/js_htmldom.asp 基本介绍: DOM全称是Document Object M ...