首页 > 其他分享 >[HNOI2015]落忆枫音 题解

[HNOI2015]落忆枫音 题解

时间:2023-03-16 15:55:06浏览次数:41  
标签:frac 脉络 穴位 题解 ll 枫音 落忆 prod sum

题目背景

...

题目描述

不妨假设枫叶上有 n个穴位,穴位的编号为 1 ~ n。有若干条有向的脉络连接着这些穴位。穴位和脉络组成一个有向无环图——称之为脉络图(例如图 1),穴位的编号使得穴位 1 没有从其他穴位连向它的脉络,即穴位 1 只有连出去的脉络;由上面的故事可知,这个有向无环图存在一个树形子图,它是以穴位 1为根的包含全部n个穴位的一棵树——称之为脉络树(例如图 2和图 3给出的树都是图1给出的脉络图的子图);值得注意的是,脉络图中的脉络树方案可能有多种可能性,例如图2和图 3就是图 1给出的脉络图的两个脉络树方案。 脉络树的形式化定义为:以穴位 r 为根的脉络树由枫叶上全部 n个穴位以及 n- 1 条脉络组成,脉络树里没有环,亦不存在从一个穴位连向自身的脉络,且对于枫叶上的每个穴位 s,都存在一条唯一的包含于脉络树内的脉络路径,使得从穴位r 出发沿着这条路径可以到达穴位 s。 现在向脉络图添加一条与已有脉络不同的脉络(注意:连接 2个穴位但方向不同的脉络是不同的脉络,例如从穴位3到4的脉络与从4到3的脉络是不同的脉络,因此,图 1 中不能添加从 3 到 4 的脉络,但可添加从 4 到 3 的脉络),这条新脉络可以是从一个穴位连向自身的(例如,图 1 中可添加从 4 到 4 的脉络)。原脉络图添加这条新脉络后得到的新脉络图可能会出现脉络构成的环。 请你求出添加了这一条脉络之后的新脉络图的以穴位 1 为根的脉络树方案数。 由于方案可能有太多太多,请输出方案数对 1,000,000,007 取模得到的结果。

输入输出格式

输入格式

输入文件的第一行包含四个整数 n、m、x和y,依次代表枫叶上的穴位数、脉络数,以及要添加的脉络是从穴位 x连向穴位y的。 接下来 m行,每行两个整数,由空格隔开,代表一条脉络。第 i 行的两个整数为ui和vi,代表第 i 条脉络是从穴位 ui连向穴位vi的。

输出格式

输出一行,为添加了从穴位 x连向穴位 y的脉络后,枫叶上以穴位 1 为根的脉络树的方案数对 1,000,000,007取模得到的结果。

输入输出样例

输入样例 #1

4 4 4 3
1 2
1 3
2 4
3 2

输出样例 #1

3

说明

对于所有测试数据,\(1 \leq n \leq 100000, n - 1 \leq m \leq min(200000, \frac {n(n -1)} {2}),1 \leq x, y, u_i, v_i \leq n\)

SOLUTION

首先我们知道:

若是对于DAG(有向无环图),生成树的方案数为\(\prod_{i\in S} d(i)\)

\(d(i)\):\(i\)的入度

(证明略,可以自行1秒思考)

因为现在多加了一条边,那么就有一个环

所以我们考虑如何算出不合法的部分

设加了\((x,y)\)这条边

当换上的边都被选中时就是不合法的

因此

设\(sum=\prod_{i\in S} d(i)\)

那么不合法的方案就是:\(\frac{sum}{\prod_{i\in T}d(i)}\)

其中T为\(x\to y\)的环上

算的其实就是将环外的点连成树,再选了这个环的方案数

(由于这是要选树型图,肯定只选n-1条边,也就是每个点(除了点1)都只有一个入边,所以若选了这个环,那么环之内的图的入边就已经满了,所以不合法的情况只可能是环外的点单独形成一个树形图+选了环)

对于统计\(\frac{sum}{\prod_{i\in T}d(i)}\)

我们可以设\(g(i)\)为环上\(i\)点到\(y\)点的\(d\)的:

\(g(i)=\frac{sum}{\prod_{u\in (i\to y)}d(u)}\)

所以边界:\(g(y)=\frac{sum}{d(y)}\)

转移方程:\(g(i)=\frac{\sum{g(to)}}{d(i)}\)

(关于转移方程的疑问)

\(y\to x\)不只一条路径(应该是这样的)

所以上面的可能在表述上有点问题(但是问题不大)

统计的是每一个环内*环外的方案之和

假设当前点为\(i\),有两个点\(x1,x2\)都可以到达\(x\)

并且\(x1,x2\)都直接连着\(i\)

那么答案=两个环的\(\frac{sum}{\prod_{u\in (i\to y)}d(u)}\)之和

也就=\(\frac{(\frac{sum}{\prod_{u\in{x\to x1}} d(u)}+\frac{sum}{\prod_{u\in{x\to x2}} d(u)})}{\prod_{u\in{i\to y}}}\)

所以转移方程:\(g(i)=\frac{\sum{g(to)}}{d(i)}\)

over!(讲的应该还是比较清晰的)

CODE

#include<bits/stdc++.h>
// 给定一张有向无环图,现在要求加入一条边,求加入后以1为根的树形图个数
#define ll long long
using namespace std;
const ll N=2e6+2,P=1e9+7;
ll n,m,X,Y,x,y,hd[N],vis[N],to[N],nxt[N],g[N];
ll dsum=1,ans=1,d[N],cnt;
void add(ll x,ll y){
	to[++cnt]=y;
	nxt[cnt]=hd[x];
	hd[x]=cnt;
}
ll qpow(ll a,ll b){
	ll res=1;
	while(b){
		if(b&1)res=res*a%P;
		a=a*a%P;
		b>>=1;
	}
	return res;
}
void dfs(ll x){
	if(vis[x])return ;
	vis[x]=1;
	if(x==Y){
		g[x]=dsum*qpow(d[x],P-2)%P;
		return ;
	}
	for(ll i=hd[x];i;i=nxt[i]){
		ll y=to[i];
		dfs(y);
		(g[x]+=g[y])%=P;
	}
	(g[x]*=qpow(d[x],P-2))%=P;
}
int main(){
	scanf("%lld%lld%lld%lld",&n,&m,&X,&Y);
	for(ll i=1;i<=m;i++){
		scanf("%lld%lld",&x,&y);
		add(y,x);d[y]++;
	} 
	d[1]++;
	for(ll i=1;i<=n;i++){
		if(i==Y)(ans*=(d[i]+1))%=P;
		else (ans*=d[i])%=P;
		(dsum*=d[i])%=P;
	}
	dfs(X);
	ans=(ans+P-g[X])%P;
	printf("%lld",ans);
	return 0;
}

w完结撒花❀

★,°:.☆( ̄▽ ̄)/$:.°★

标签:frac,脉络,穴位,题解,ll,枫音,落忆,prod,sum
From: https://www.cnblogs.com/Aurora1217/p/17222911.html

相关文章

  • 题解 GDKOI2023 普及 D2T4
    口胡。problem一个图,边带权,有\(k\leq50\)个关键边,对于\(0\leqi\leqk\)求出恰好含有\(i\)条关键边的最小生成树的权值和。\(n\leq10000,m\leq10^6,k\leq50\)......
  • NOI 2008 志愿者招募 题解 (神奇费用流)
    洛谷题目链接思路很清奇的网络流题这种第i天需要至少\(a_i\)人的限制,按常规思路容易想到在i号点和i+1号点之间连一条容量为\(a_i\)的边,并强制流满。但是如果雇佣了一个人......
  • ARC153B Grid Rotations 题解
    B-GridRotations(atcoder.jp)SOLUTION我表示大为不理解。。。。这个简单......
  • 選択問題の正答はすべて同じ選択肢で… 题解
    题目传送门由于数据问题,我们可以使用C++STL里的map存储企鹅君选择的答案以及次数。先定义一个map,用来储存答题情况。接着将企鹅君的答案存入map,顺便求出最大值。m......
  • 洛谷-P9147 题解
    正文最坏时间复杂度:\(\mathcal{O}(n)\)真不愧是签到题,差点没签上。。。我相信题意各位肯定很理解了,非常简单,但如何解决就是个问题。首先考虑朴素解法,建立一个求最长连......
  • 【题解】P6667 [清华集训2016] 如何优雅地求和
    orzfjy666orzfjy666orzfjy666神·fjy666·拉普拉斯·爱因斯坦大帝于5min内爆切了此题,膜拜!思路斯特林数。注意到\(f(k)\)是多项式而式子中含有组合数,于......
  • 公众号前端访问后台500 疑难问题解决
     后台日志联调,发现前端根本无法进入后台方法中去经过仔细对比发现referrer请求过长在主设置页面增加<metaname="referrer"content="origin">配置问题解决 ......
  • 阿里一面:15道网络安全真题解析,你能答对几道?
    前言网络安全是一个广阔的领域,面试过程中可能会提出各种各样的问题。招聘人员主要关注技术方面以及工具和技术知识,以确保框架安全。 以下是在网络安全领域寻求工作时可能......
  • 2023.3.14 状压 dp 模拟赛题解
    好强啊。不说是谁了,都好强啊呜呜呜。   首先T1的一个优化luoguP1842奶牛玩杂技,需要一个贪心排序来优化序列顺序。关于贪心排序:像这样有两种及以上性质的序列,......
  • 2020年河南省CCPC 题解
    2020年河南省CCPC题解ProblemA.班委竞选设ax为第x类班干部最大票数。从小到大枚举学号i,若新x>ax则更新ax并且记录i为ansx的答案voidsolve(){intn=re......