题面

洛谷

题解

20pts

枚举每一条边是否在树中即可。

另10pts

我们考虑一张\(DAG\)中构成树的方法数,每个点选一个父亲即可,那么有
\[Ans=\prod_{i=1}^{n} deg_i\]

\(deg_i\)表示点\(i\)的入度,其中\(deg_1=1\)。

\(100pts\)

考虑在上面的基础上容斥,

考虑连\(y\rightarrow x\)后出现一个环的情况数,其实就是环上的点固定了父亲,

那么最后答案就是

\[ \prod_{i=1}^{n} deg_i-\frac {\prod_{i=1}^{n} deg_i}{\prod_{j\in loop} deg_j} \]

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
inline int gi() {register int data = 0, w = 1;register char ch = 0;while (!isdigit(ch) && ch != '-') ch = getchar(); if (ch == '-') w = -1, ch = getchar();while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();return w * data;
}
const int Mod = 1e9 + 7;
const int MAX_N = 1e5 + 5, MAX_M = 2e5 + 5;
int fpow(int x, int y) { int res = 1; while (y) { if (y & 1) res = 1ll * res * x % Mod; x = 1ll * x * x % Mod; y >>= 1; } return res;
}
struct Graph { int to, next; } e[MAX_M]; int fir[MAX_N], e_cnt;
void clearGraph() { memset(fir, -1, sizeof(fir)); e_cnt = 0; }
void Add_Edge(int u, int v) { e[e_cnt] = (Graph){v, fir[u]}, fir[u] = e_cnt++; }
int N, M, sx, sy, deg[MAX_N], f[MAX_N];
bool vis[MAX_N];
void dfs(int x) { if (vis[x]) return ; vis[x] = 1; if (sx == x) return (void)(f[x] = 1ll * fpow(deg[x], Mod - 2)); for (int i = fir[x]; ~i; i = e[i].next) dfs(e[i].to), f[x] = (f[x] + f[e[i].to]) % Mod; f[x] = 1ll * f[x] * fpow(deg[x], Mod - 2) % Mod;
}
int main () {
#ifndef ONLINE_JUDGE freopen("cpp.in", "r", stdin);
#endifclearGraph(); N = gi(), M = gi(), sx = gi(), sy = gi(); for (int u, v, i = 1; i <= M; i++) u = gi(), v = gi(), Add_Edge(u, v), ++deg[v]; ++deg[1];int ans = 1, res = 1; for (int i = 1; i <= N; i++) {if (i == sy) ans = 1ll * ans * (deg[i] + 1) % Mod;else ans = 1ll * ans * deg[i] % Mod;res = 1ll * res * deg[i] % Mod; } dfs(sy); ans = (ans - 1ll * res * f[sy] % Mod + Mod) % Mod;printf("%d\n", ans); return 0;
} 

转载于:https://www.cnblogs.com/heyujun/p/10435903.html

【LG3244】[HNOI2015]落忆枫音相关推荐

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

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

  2. [HNOI2015] 落忆枫音

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

  3. Bzoj4011 [HNOI2015]落忆枫音

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

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

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

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

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

  6. [HNOI2015]落忆枫音

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

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

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

  8. luogu3244 bzoj4011 HNOI2015 落忆枫音

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

  9. luogu P3244 [HNOI2015]落忆枫音

    传送门 md这题和矩阵树定理没半毛钱关系qwq 首先先不考虑有环,一个\(DAG\)个外向树个数为\(\prod_{i=2}^{n}idg_i(\)就是\(indegree_i)\),因为外向树每个点 ...

  10. BZOJ 4011 HNOI2015 落忆枫音

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

最新文章

  1. 宏使用 Tricks
  2. 管道通信C语言,Go语言通道(chan)——goroutine之间通信的管道
  3. 教育部:建设100+AI特色专业, 500万AI人才缺口要补上!
  4. 在excel工作表中c1单元格_已知Excel工作表中A1单元格和B1单元格的值分别为“电子科技大学”、“信息中心”,要求在C1单元格显示“...
  5. ahjesus Ubuntu配置svn服务器
  6. 退格键删除input中光标指定的字符串_Linux中的vi 三种模式
  7. pandas学习笔记——阅读官方文档
  8. pcDuino上跑 MQ2 Shield
  9. 高,低电平复位电路原理及加电容的作用
  10. mysql innodb_double_write特性
  11. php 连接redis服务器
  12. pmp考试中变更的处理流程
  13. java web 视频教程下载_Java web(Servlet+Jsp),视频教程下载
  14. 论文笔记:Integrated Object Detection and Tracking with Tracklet-Conditioned Detection
  15. XtraReport控件详细属性说明
  16. dubbo 2标签解析 ServiceBeanT 生产者服务暴漏过程
  17. 网站设计新趋势:沉浸式交互设计
  18. 基于SSM框架的借阅图书管理系统
  19. TD源链:让技术回归本质
  20. 计算机启动进入桌面非常慢,电脑开机加载桌面很慢的解决办法

热门文章

  1. http://baiy.cn/doc/cpp/inside_exception.htm#栈回退(Stack_Unwind)机制
  2. matplotlib报错:Glyph 25151 (\N{CJK UNIFIED IDEOGRAPH-623F}) missing from current font. func(*args)
  3. go分析和kegg分析_一些GO及KEGG分析的知识
  4. Linux中常用的scree的安装和常用的screen命令
  5. 电子设计大赛-无线电类题目分析
  6. 计算机技术服务业成本核算,如何进行服务行业的成本核算
  7. charles 批量重复请求/重复发包工具
  8. C语言 PTA 时间换算
  9. linux 活动主分区,主引导扇区(MBR),分区表(DPT)及活动分区(DBR) | 技术部落
  10. 爬虫抓取暗黑3国服天梯榜数据及分析