【HNOI2015】落忆枫音
题面
题解
求一个有特殊性质的有向图的生成树的个数。
首先,有向图的生成树的个数可以用矩阵树定理,能够得到\(40\)分。
但是如果它是一个\(\mathrm{DAG}\)就很好做,枚举每一个点的父亲,答案就是\(\prod d[i]\),\(d\)是每个点的入度
发现加了一条边之后只会形成一个环,设环上的点为\(a_1, a_2, \cdots, a_k\),那么形成的不合法的生成树有\(\frac{\prod_i d[i]}{\prod_{i = 1} ^ k d[a_i]}\)种。
于是答案就是\(\prod_i d[i] - \frac{\prod_i d[i]}{\prod_{i = 1} ^ k d[a_i]}\)
代码
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define clear(x, y) memset(x, y, sizeof(x))
inline int read()
{
int data = 0, w = 1; char ch = getchar();
while(ch != '-' && (!isdigit(ch))) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
}
const int maxn(100010), maxm(200010), Mod(1000000007);
struct edge { int next, to; } e[maxm];
int head[maxn], e_num, n, m, vis[maxn], deg[maxn];
int sx, sy, ans = 1, dmul = 1, f[maxn];
inline void add_edge(int from, int to)
{
e[++e_num] = (edge) {head[from], to};
head[from] = e_num;
}
int fastpow(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 dfs(int x)
{
if(vis[x]) return; vis[x] = 1;
if(x == sy) return (void) (f[x] = 1ll * dmul
* fastpow(deg[x], Mod - 2) % Mod);
for(RG int i = head[x]; i; i = e[i].next)
dfs(e[i].to), f[x] = (f[x] + f[e[i].to]) % Mod;
f[x] = 1ll * f[x] * fastpow(deg[x], Mod - 2) % Mod;
}
int main()
{
n = read(), m = read(), sx = read(), sy = read();
for(RG int i = 1, a, b; i <= m; i++)
a = read(), b = read(), add_edge(b, a), ++deg[b];
++deg[1];
for(RG int i = 1; i <= n; i++)
{
if(i == sy) ans = 1ll * ans * (deg[i] + 1) % Mod;
else ans = 1ll * ans * deg[i] % Mod;
dmul = 1ll * dmul * deg[i] % Mod;
}
dfs(sx); ans = (ans - f[sx] + Mod) % Mod;
printf("%d\n", ans);
return 0;
}
【HNOI2015】落忆枫音的更多相关文章
- BZOJ 4011: [HNOI2015]落忆枫音( dp )
DAG上有个环, 先按DAG计数(所有节点入度的乘积), 然后再减去按拓扑序dp求出的不合法方案数(形成环的方案数). ---------------------------------------- ...
- bzoj4011[HNOI2015]落忆枫音 dp+容斥(?)
4011: [HNOI2015]落忆枫音 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1125 Solved: 603[Submit][Statu ...
- [HNOI2015]落忆枫音 解题报告
[HNOI2015]落忆枫音 设每个点入度是\(d_i\),如果不加边,答案是 \[ \prod_{i=2}^nd_i \] 意思是我们给每个点选一个父亲 然后我们加了一条边,最后如果还这么统计,那么 ...
- 4011: [HNOI2015]落忆枫音
4011: [HNOI2015]落忆枫音 链接 分析: 原来是一个DAG,考虑如何构造树形图,显然可以给每个点找一个父节点,所以树形图的个数就是$\prod\limits_u deg[u]$. 那么加 ...
- BZOJ4011: [HNOI2015]落忆枫音
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们 ...
- [HNOI2015]落忆枫音
题目描述 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂......我们也不可能再 ...
- BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们也 ...
- BZOJ 4011: [HNOI2015]落忆枫音 计数 + 拓扑排序
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们 ...
- [bzoj4011] [洛谷P3244] [HNOI2015] 落忆枫音
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂--我们也 ...
- luogu3244 bzoj4011 HNOI2015 落忆枫音
这道题目题面真长,废话一堆. 另外:这大概是我第一道独立做出来的HNOI2011年以后的题目了吧.像我水平这么差的都能做出来,dalao您不妨试一下自己想想? 题目大意:给一个DAG,其中1号点没有入 ...
随机推荐
- Jquery的跨域调用
JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念.当然,究其本质还是通过script标签动态加载js,似乎这是实现真正跨域的唯一方法. getJSON ...
- 解决linux buffer/cache 消耗内存过高引发的问题
工作中接到DBA报障某台服务器 跑一些大的数据,服务器就无法远程连接,报错,抓过日志叫DELL工程师检测也没问题,系统也重装过, 现在些一些较大的数据就会报如 图错误,由于服务器远在异地城市IDC机房 ...
- 关于Tomcat端口出现的问题
=Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. Th ...
- linux面试总结
一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点 来标识. ...
- css3实现border渐变色
案例1 .box{ width: 100px; height: 100px; border:10px solid #ddd; border-image: -webkit-linear-gradient ...
- 解决 hibernate cannot define positional parameter after any named parameters have been defined
解决 hibernate cannot define positional parameter after any named parameters have been defined 把模糊查询的 ...
- 移动端上下滑动事件之--坑爹的touch.js
下面的方法,不知道是操作方法不对还是啥. 在 zepto.js 里面加那一段代码不起作用 百度的 touch.js 是可以用的,但是使用方式 和 zepto有点不一样. 解决方案:参照这个链接地址 ...
- 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
最近Jerry在忙一个项目,技术栈换成了nodejs平台,语言换成了JavaScript,因为赶项目进度,一直没时间更新公众号.感谢大家的支持,关注人数还是慢慢地增长到了3000. 今天我们来聊聊一个 ...
- CORS跨域模型浅析及常见理解误区分析
CORS跨域资源共享是前后端跨域十分常用的一种方案,主要依赖Access-Control-Allow(ACA)系列header来实现一种协商性的跨域交互. 基本模型 其中的具体流程大致可以分为以下几步 ...
- 扯不清楚的virtual和abstract
定义Person类: class Person { public void Say() { Console.WriteLine("I am a person"); } } 现在,我 ...