[HNOI2015] 落忆枫音

题目描述

「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上。望着漫天飞舞的红枫,枫茜突然问出这样一个问题。

「相信吧。不然我们是什么,一团肉吗?要不是有灵魂......我们也不可能再见到你姐姐吧。」 恒逸给出了一个略微无厘头的回答。枫茜听后笑了笑。 「那你仔细观察过枫叶吗?」 说罢,枫茜伸手,接住了一片飘落的枫叶。

「其实每一片枫叶都是有灵魂的。你看,枫叶上不是有这么多脉络吗?我听说,枫叶上有一些特殊的位置,就和人的穴位一样。脉络都是连接在这些穴位之间的。枫树的灵魂流过每片枫叶的根部,沿着这些脉络,慢慢漫进穴位,沁入整片枫叶。也是因为这个原因,脉络才都是单向的,灵魂可不能倒着溜回来呢。」 恒逸似懂非懂地点了点头。枫茜接着说了下去。

「正是因为有了灵魂,每片枫叶才会与众不同。也正是因为有了灵魂,每片枫叶也都神似其源本的枫树,就连脉络也形成了一棵树的样子。但如果仔细看的话,会发现,在脉络树之外,还存在其它的非常细的脉络。虽然这些脉络并不在树上,但他们的方向也同样顺着灵魂流淌的方向,绝不会出现可能使灵魂倒流的回路。」 恒逸好像突然想到了什么。 「那这些脉络岂不是可以取代已有的脉络,出现在脉络树上?」 枫茜闭上了眼睛。

「是啊,就是这样。脉络树并不是唯一的。只要有一些微小的偏差,脉络树就可能差之万里,哪怕是在这同一片枫叶上。就像我们的故事,结局也不是唯一的。只要改变一个小小的选项,故事流程可能就会被彻底扭转。」

「真是深奥啊......」 恒逸盯着这片红枫,若有所思地说。枫茜继续说道。

「还不止如此呢。所有的脉络都不会永恒存在,也不会永恒消失。不管是脉络树上的脉络,还是之外的细小脉络,都是如此。存在的脉络可能断开消失,消失的脉络也可能再次连接。万物皆处在永恒的变化之中,人与人之间的羁绊也是。或许有一天,我们与大家的羁绊也会如同脉络一样,被无情地斩断。或许我们也终将成为”枫音乡的过客“。或许这一切都会是必然,是枫树的灵魂所决定的......」

枫茜的眼角泛起了几滴晶莹剔透的泪珠。恒逸看着这样的枫茜,将她抱入怀中。

「别这样想,枫茜。就算脉络断开,也有可能还会有新的脉络树,也还会与枫树的根相连。这样的话,我们的羁绊仍然存在,只是稍微绕了一些远路而已。无论如何,我都不会离开你的。因为你是我穷尽一生所寻找的,我的真恋啊!」

两人的目光对上了。枫茜幸福地笑了,把头埋进了恒逸的怀抱。从远方山上的枫林中,传来了枫的声音。

【问题描述】 不妨假设枫叶上有 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 <= n <= 100000,n - 1 <= m <= min(200000, n(n -1) / 2),

1 <= x, y, ui, vi <= n。

 

先不考虑图中的环,让每个点都选它的入点中的一个当爸爸,显然答案是π indegree[i]  其中i>1。

然后特判一下如果y==1的话直接输出就好了,因为在计算式里这条边对答案已经没有贡献了,并且在合法方案中这条边肯定不能存在。

然后不合法的方案就是y到x的路径上每一个点选的爸爸都是路径上上一个点(y除外),而且y的父亲是x(这个是选附加边带来的效应)。

这样的不合法的方案数就是除了这些节点的其他节点的入度的乘积(1除外)

所以在dag上dp就行了。。

 

#include<bits/stdc++.h>
#define ll long long
#define maxn 100005
#define ha 1000000007
using namespace std;
int n,m,to[maxn<<1|1],num;
int ne[maxn<<1|1],hd[maxn];
int S,T,id[maxn],ans=0;
int inv[maxn],cnt=1,f[maxn];
bool v[maxn];inline void init(){inv[1]=1;for(int i=2;i<n;i++) inv[i]=-inv[ha%i]*(ll)(ha/i)%ha+ha;
}inline int add(int x,int y){x+=y;return x>=ha?x-ha:x;
}int dp(int x){if(v[x]) return f[x];v[x]=1;for(int i=hd[x];i;i=ne[i]) f[x]=add(f[x],dp(to[i]));f[x]=f[x]*(ll)inv[id[x]]%ha;return f[x];
}int main(){scanf("%d%d%d%d",&n,&m,&S,&T);id[T]++,init();int uu,vv;for(int i=1;i<=m;i++){scanf("%d%d",&uu,&vv);to[i]=vv,ne[i]=hd[uu],hd[uu]=i;id[vv]++;}for(int i=2;i<=n;i++) cnt=cnt*(ll)id[i]%ha;ans=cnt;if(S==T||T==1){printf("%d\n",ans);return 0;}v[S]=1,f[S]=inv[id[S]];dp(T);ans=add(ans,ha-cnt*(ll)f[T]%ha);printf("%d\n",ans);return 0;
}

  

转载于:https://www.cnblogs.com/JYYHH/p/8485900.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

border,padding,margin盒模型理解

安静的敲着键盘&#xff0c;已势不可挡的姿势逼近php&#xff0c;我想我是一个幸福的人&#xff0c;未来不可期&#xff0c;做好现在&#xff0c;偶尔写着自己能看懂的API,慢慢悠悠的回味一下前端基础知识。 本文盒模型理解。 <!DOCTYPE html> <html lang"en&qu…

我的Java自定义线程池执行器

ThreadPoolExecutor是Java并发api添加的一项功能&#xff0c;可以有效地维护和重用线程&#xff0c;因此我们的程序不必担心创建和销毁线程&#xff0c;而将精力放在核心功能上。 我创建了一个自定义线程池执行程序&#xff0c;以更好地了解线程池执行程序的工作方式。 功能性…

php中mysqlstat函数,PHP函数mysql_stat介绍

&#xfeff;定义和用法mysql_stat() 函数返回 MySQL 服务器的当前系统状态。如果成功&#xff0c;则该函数返回状态。如果失败&#xff0c;则返回 false。语法mysql_stat(connection)提示和注释注释&#xff1a;mysql_stat() 目前只返回 uptime、threads、queries、open table…

全选、全部选、反选、提交

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body><form><input type"checkbox" name"items" value"足球"&…

Java中的模板方法设计模式

模板方法模式是一种行为设计模式&#xff0c;它为算法提供了基础方法&#xff0c;称为模板方法&#xff0c;该方法将其某些步骤推迟到子类中&#xff0c;因此算法结构相同&#xff0c;但某些步骤可以由子类根据上下文重新定义。 模板是指预设格式&#xff0c;例如HTML模板&…

android adb源码分析(1)

ADB是Android debug bridge的缩写&#xff0c;它使用PC机可以通过USB或网络与android设备通讯。 adb的源码位于system/core/adb目录下&#xff0c;先来看下编译脚本Android.mk&#xff1a; [plain] view plaincopy# Copyright 2005 The Android Open Source Project # # Andr…

matlab二次二阶距,用Matlab改进一次二阶矩法程序.doc

用Matlab编的计算结构可靠指标的改进一次二阶矩法程序(验算点法)题目&#xff1a;编制改进一次二阶矩法计算可靠指标的程序&#xff0c;并给出算例&#xff0c;要求提供源程序选取的算例为&#xff1a;zg(x,y)x*y-1140&#xff0c;其中x,y服从正态分布&#xff0c;μx38,Vx0.1,…

winform中的数据绑定

1. 简单的数据绑定 例1 using (SqlConnection conn new SqlConnection(ConfigurationManager.ConnectionStrings["connStr"].ToString())) { SqlDataAdapter sda new SqlDataAdapter("Select * From T_Class Where F_TypeProduct order by F_RootID,F_Order…

jQuery数据表和Java集成

jQuery DataTables是一个开放源代码插件&#xff0c;用于在浏览器中创建表。 它具有许多功能&#xff0c;例如排序&#xff0c;服务器端处理&#xff0c; JQUERY UI主题滚动。 该插件的下载链接&#xff1a; http://www.datatables.net/download/ 在本演示中&#xff0c;我…

CSS 属性 - 伪类和伪元素的区别

伪元素和伪类之所以这么容易混淆&#xff0c;是因为他们的效果类似而且写法相仿&#xff0c;但实际上 css3 为了区分两者&#xff0c;已经明确规定了伪类用一个冒号来表示&#xff0c;而伪元素则用两个冒号来表示。 :Pseudo-classes ::Pseudo-elements 但因为兼容性的问题&…

class-感知机Perception

1 感知机模型1.1 模型定义2 感知机学习策略2.1 数据的线性可分性2.2 学习策略3 学习算法3.1 算法原始形式3.2 收敛性3 学习算法的对偶形式1 感知机模型 感知机perceptron是二类分类问题的线性分类模型&#xff0c;输入为实例的特征向量&#xff0c;输出为实例的类别&#xff08…

图片资源 php,php URL图片资源传参生成对应尺寸图片

最近项目中需要上传大图&#xff0c;然后不同设备请求不同大小的图片&#xff0c;之前有用过一个通过URL参数来获取不同大小的图片的接口感觉设计方式请不错&#xff0c;于是就百度看看类似是如何实现的&#xff0c;找了几天找个两个功能类似的记录下。1、图片服务器 imagemagi…

Java中的方法调用有多昂贵

我们都去过那儿。 在查看设计不良的代码的同时&#xff0c;听听作者对人们永远不应该牺牲性能而不是设计的解释。 而且&#xff0c;您不能说服作者摆脱其500行方法&#xff0c;因为链接方法调用会破坏性能。 好吧&#xff0c;这可能在1996年左右是正确的。 但是自那时以来&…

UVa-116 Unidirectional TSP 单向旅行商

题目 https://vjudge.net/problem/uva-116 分析 设d[i][j]为从(i,j)到最后一列的最小开销&#xff0c;则d[i][j]a[i][j]max(d[i1][j1],d[i-1][j1]) 参考数字三角形,用逆推的方法,先确定最后一列d[i][n-1]a[i][n-1],再确定n-2列,此时d[i][n-2] a[i][n-2]min(d[i][n-1],d[i-1][n…

1.HTML

HTML简介 hyper text markup language 即超文本标记语言。 超文本: 就是指页面内可以包含图片、链接&#xff0c;甚至音乐、程序等非文字元素。 标准模板 <!DOCTYPE html> <html lang"en"><head> <meta charset"U…

error connection reset by peer 104

connection reset by peer的常见原因 1.服务器的并发连接数超过了其承载量&#xff0c;服务器会将其中一些连接关闭&#xff1b;2. errno 104错误表明你在对一个对端socket已经关闭的的连接调用write或send方法&#xff0c;在这种情况下&#xff0c;调用write或send方法后&…

php记住表单数据cookie,【PHP基础】cookies和session

1.Cookiescookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时&#xff0c;它同时会发送 cookie。通过 PHP&#xff0c;您能够创建并取回 cookie 的值。1.1、如何创建 cookie&#xff1f;setcookie() 函数用于设置 cookie。…

自己构建GlassFish 4.0快照

这篇文章是关于自己发布GlassFish 4.0快照的&#xff0c;其中包括一些黑客。 我找到了GlassFish FullBuild的官方说明&#xff0c;然后决定自己构建服务器。 有时&#xff0c;您可能不想等待团队升级GlassFish构建文件。 在本条目中&#xff0c;我将Artifactory称为私有Maven存…

【转】utf-8的中文是一个汉字占三个字节长度

因为看到百度里面这个人回答比较生动&#xff0c;印象比较深刻&#xff0c;所以转过来做个笔记 原文链接 https://zhidao.baidu.com/question/1047887004693001899.html 知乎也有更清晰解答 https://www.zhihu.com/question/23374078 1、美国人首先对其英文字符进行了编码&am…

matlab升压斩波仿真,升压斩波电路设计与仿真.doc

升压斩波电路设计与仿真1.序言近年来&#xff0c;不断进步的计算机技术为现代控制技术在实际生产、生活中提供了强有力的技术支持&#xff0c;新的材料和结构器件又促进了电力电子技术的飞速发展&#xff0c;且在各行业中得到广泛的应用。电力电子技术(Power Electronics Techn…