Problem

真·bzoj

真的不要强行看题面,简要题意:

给定一个DAG,在DAG上加一条题目指定的边,求新图上的树形图个数

Solution

发现如果忽略新加的一条边的话答案就是所有节点入度的乘积

但题目中在DAG上新加了一条边,那么答案一定有重的,重的就是加上这条边后形成的环,那么最终的答案就是原来的答案减去包含这个环的树形图个数,其实相当于在原DAG上拓扑找到从新边终点到新边起点的路径上有多少包含这条链的树形图,和统计DAG中的答案类似,就是总答案除以这个子DAG上的点的入度积,最后用原答案减去这个即可

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rg register
#define cl(x) memset(x,0,sizeof(x))
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define abs(x) ((x)>0?(x):(-(x)))template <typename _Tp> inline _Tp read(_Tp&x){rg char c11=getchar(),ob=0;x=0;while(c11^'-'&&!isdigit(c11))c11=getchar();if(c11=='-')c11=getchar(),ob=1;while(isdigit(c11))x=x*10+c11-'0',c11=getchar();if(ob)x=-x;return x;
}const ll p=1000000007;
const int N=100500,M=200500;
struct Edge{int v,nxt;}a[M];
int head[N],deg[N],cnt[N],inv[max(N,M)],n,m,s,t,_(0);
ll f[N],ans(1);void pre(int li){inv[1]=1;for(rg int i=2;i<=li;++i)inv[i]=1ll*(p-p/i)*inv[p%i]%p;return ;
}inline void add(int u,int v){a[++_].v=v,a[_].nxt=head[u],head[u]=_;}void topology(){f[t]=ans;queue <int> q;while(!q.empty())q.pop();for(rg int i=1;i<=n;++i)if(!(cnt[i]=deg[i]))q.push(i);--cnt[t];while(!q.empty()){rg int x=q.front();q.pop();f[x]=1ll*f[x]*inv[deg[x]]%p;for(rg int i=head[x];i;i=a[i].nxt){f[a[i].v]=(f[a[i].v]+f[x])%p;if(!(--cnt[a[i].v]))q.push(a[i].v);}}
}int main(){read(n),read(m);read(s),read(t);pre(max(n,m));++deg[t];for(rg int i=0,x,y;i<m;++i)read(x),read(y),add(x,y),++deg[y];for(rg int i=2;i<=n;++i)ans=1ll*ans*deg[i]%p;if(t==1){printf("%lld\n",ans);return 0;}topology();printf("%lld\n",(ans-f[s]+p)%p);return 0;
}

【题解】HNOI-2015落忆枫音相关推荐

  1. 【题解】 [HNOI2015]落忆枫音 (拓扑排序+dp+容斥原理)

    原题戳我 Solution: (部分复制Navi_Aswon博客) 解释博客中的两个小地方: \[\sum_{\left(S是G中y→x的一条路径的点集\right))}\prod_{2≤j≤n,(j ...

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

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

  3. Bzoj4011 [HNOI2015]落忆枫音

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

  4. [bzoj4011][DP]落忆枫音

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

  5. [HNOI2015] 落忆枫音

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

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

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

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

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

  8. [HNOI2015]落忆枫音

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

  9. luogu3244 bzoj4011 HNOI2015 落忆枫音

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

  10. P3244-[HNOI2015]落忆枫音【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3244 题目大意 给出一个DAG\text{DAG}DAG,保证111可以到达所有点.然后再加入一条边(之后不一定 ...

最新文章

  1. 学界丨北大清华合力打造通用人工智能实验班,朱松纯教授领衔
  2. Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】
  3. 屏幕录制工具(可录制GIF)
  4. 掉电引起的ORA-1172错误解决过程(二)
  5. tkinter label_tkinter做一个简易提词板
  6. (vue基础试炼_01)使用vue.js 快速入门hello world
  7. 有了 IP 地址,为什么还要用 MAC 地址?
  8. 使用statsvn统计svn中代码行
  9. 【guava】GuavaCache缓存失效的时候做一些操作 RemovalListener
  10. LNMP环境SVN钩子脚本的使用
  11. 25. Location hash 属性
  12. 面向对象13:单元测试方法、包装类的使用、包装类面试题
  13. 【SGU495】Kids and Prizes(概率dp)
  14. unity 地图画格_[蛮牛译馆]UnityC#教程—六边形地图系列之创建网格(中)
  15. java jsp传值乱码_关于JSP乱码问题(页面传值产生的乱码)
  16. 推荐十五款APP原型设计工具
  17. Ardunio开发实例-L9110直流电机驱动模块
  18. ubuntu查看实时网速
  19. php课程设计感想,设计心得体会
  20. SecTalks: BNE0x00 - Minotaur靶机

热门文章

  1. 愤怒的导数:一点可导和邻域内可导能推出来什么?
  2. B站C语言字符动画原理,最初B站会员答题有多么“丧心病狂”?
  3. b站视频怎么引流?b站做什么视频有流量?b站流量引流技巧
  4. 微信小程序picker选择器(下拉框)以及传值问题
  5. 完美数——C++代码及思路分析 leetcode507
  6. 从零开始的小白pr学习之旅--day2 数字后端流程(一)
  7. xp 无线网络 搜索 服务器,WinXP系统搜索不到无线网络的解决方法【图】
  8. python将列表元素全部小写_在Python中的字符串列表中转换元素的大小写
  9. 云通信接口更新迭代——SUBMAIL API V4正式上线
  10. 谈谈自信,为什么自信是成功的第一秘诀?