看了好多篇题解才看懂的题,我实在太菜了...

首先根据一个我不知道的算法,可以证明在没有加入新的边的时候,原图的所有生成树的方案数就是所有点(除1以外)的度之积

那么在新加入这条边之后,我们仍然可以这样计算,但是会产生一种问题:就是会出现环!

所以我们需要利用一些容斥,把不合法的情况去掉

接下来我们考虑如何算出不合法的情况

由于原图是一个有向无环图,所以在原图中怎么选都不会出现环,所以多的一条边一定在环内!

那么如果出现了环,一定是从多的边的终点到起点的一条路径

所以我们只需要找出终点到起点的路径数量即可

那么就进行一个拓扑排序求一下即可

考虑一下怎么求:

首先记状态:dp[i]表示从终点到i的路径数量

然后考虑初值:dp[ed]=初始方案/终点入度

(关于这里为什么要除掉一个入度:因为原来的初始方案中是包含这一点的入度的,所以要除掉这个入度)

最后ans去掉这一部分即可

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#define mode 1000000007
#define ll long long
using namespace std;
struct Edge
{
int next;
int to;
}edge[200005];
int n,m,st,ed;
ll inr[100005];
ll rinr[100005];
int head[100005];
ll inv[300005];
int cnt=1;
ll ans=1;
ll dp[100005];
void init()
{
inv[0]=inv[1]=1;
for(int i=2;i<=300000;i++)
{
inv[i]=(mode-mode/i)*inv[mode%i]%mode;
}
memset(head,-1,sizeof(head));
cnt=1;
}
void add(int l,int r)
{
edge[cnt].next=head[l];
edge[cnt].to=r;
head[l]=cnt++;
}
ll bfs()
{
dp[ed]=ans;
queue <int> M;
for(int i=1;i<=n;i++)
{
if(!inr[i])
{
M.push(i);
}
}
while(!M.empty())
{
int u=M.front();
M.pop();
dp[u]*=inv[rinr[u]];
dp[u]%=mode;
for(int i=head[u];i!=-1;i=edge[i].next)
{
int to=edge[i].to;
dp[to]+=dp[u];
dp[to]%=mode;
inr[to]--;
if(!inr[to])
{
M.push(to);
}
}
}
return ((ans-dp[st])%mode+mode)%mode;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&st,&ed);
init();
rinr[ed]=1;
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
inr[y]++;
rinr[y]++;
}
for(int i=2;i<=n;i++)
{
ans*=rinr[i];
ans%=mode;
}
if(ed==1)
{
printf("%lld\n",ans);
}else
{
printf("%lld\n",bfs());
}
return 0;
}

bzoj 4011的更多相关文章

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

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

  2. BZOJ 4011 HNOI2015 落忆枫音 DAG上的dp(实际上重点在于分析)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4011 题意概述:给出一张N点的DAG(从1可以到达所有的点),点1的入度为0.现在加一条原 ...

  3. BZOJ 4011 HNOI2015 落忆枫音

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=4011 题目很长,写得也很有诗意与浪漫色彩,让我们不禁感叹出题人是一个多么英俊潇洒的人. 所 ...

  4. BZOJ 4011 落忆枫音

    几个重点: 1.从每个点任选一条入边,都可以成为一个树形图. 2.于是考虑所有答案减去有环的答案. 3.将要求的东西形式化表示出来,然后发现可以直接dp.. 好厉害啊.. #include<io ...

  5. BZOJ 4011 开店

    Description 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的想法当然非常好啦,但是她们也发现她们 ...

  6. BZOJ 4011 【HNOI2015】 落忆枫音

    题目链接:落忆枫音 以下内容参考PoPoQQQ大爷的博客 首先我们先来考虑一下如果没有新加入的那条边,答案怎么算. 由于这是一个\(DAG\),所以我们给每个点随便选择一条入边,最后一定会构成一个树形 ...

  7. BZOJ 4011: [HNOI2015]落忆枫音 计数 + 拓扑排序

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

  8. Week One

    2018.11.21: 1.[BZOJ 4868][SHOI 2017] 从后往前枚举最后位置即可,如果$A<B$,用尽可能多的$A$替换$B$操作 Tip:很大的$C$可能爆$longlong ...

  9. 【BZOJ】【4011】【HNOI2015】落忆枫音

    拓扑排序+DP 题解:http://blog.csdn.net/PoPoQQQ/article/details/45194103 http://www.cnblogs.com/mmlz/p/44487 ...

随机推荐

  1. npm 常用命令详解(转载)

    学习gulp的使用时,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块的朋友不可错过这 ...

  2. Spring boot+Thymeleaf+easyui集成:js创建组件页面报错

    开发工具:Ideal 使用场景:Demo 前提:       环境:Spring boot +Thymeleaf+easyui 引入thymeleaf模板引擎 <html lang=" ...

  3. 加扰与加密&解扰与解密

    原文:https://blog.csdn.net/yuan892173701/article/details/8743543 加扰就是改变标准电视信号的特性,在发送端按规定处理,而加密就是在加解扰系统 ...

  4. 20165221 JAVA第四周学习心得

    教材内容总结 子类与继承 子类与父类 定义的标准格式为 class 子类名 extends 父类名 { ... } 如果一个类的声明中,没有使用extends关键字,则默认为Object类. 子类的继 ...

  5. PHP Tp5.0 PHPExcel 导出操作

    1.导出 excel 方法 2.导出方法(简单快速)

  6. python 携带cookie获取页面内容

    有时会遇到爬取的页面需要登录,这就要带上cookie了. 下面记录了几种携带cookie的方法 # coding=utf-8 import requests s = requests.Session( ...

  7. RVIZ 保存配置 and 使用配置

    每次无参数启动RVIZ, 都会使用配置 -/.rviz/default.rviz 如果每次是正常退出的话,上一次的配置会被保存到文件-/.rviz/default.rviz 需要另外保存成配置文件的话 ...

  8. 从无文件技术到使用隐写术:检查Powload的演变

    来源:https://blog.trendmicro.com/trendlabs-security-intelligence/from-fileless-techniques-to-using-ste ...

  9. spring集成cxf实现webservice接口功能

    由于cxf的web项目已经集成了Spring,所以cxf的服务类都是在spring的配置文件中完成的.以下是步骤:第一步:建立一个web项目.第二步:准备所有jar包.将cxf_home\lib项目下 ...

  10. 019_Mac实用的图像备份工具

    一.mac上有一个非常好用的图像备份工具