Description

有n个人在排队。他们会按顺序选择自己喜欢的点a[x]。如果a[x]已经被选择了,那么他会选择f[a[x]],如果f[a[x]]已经被选择了,则选择f[f[a[x]]]…保证所有人都有点选择。求选择的点本质不同的排列的方案数。
n<=10^6

Solution

我们把x向f[x]连边,那么原图就是一个环加内向树的模型。
如果只是一棵树的话,那么我们从叶子节点开始,设size[x]表示一开始选择x的人的个数,那么我们把答案*size[x],并且把size[f[x]]+=size[x]-1,就是留下一个人在这个点。
多了一条边怎么办?
因为题目保证所有人都有点选择,所以环上面肯定有一条边是不需要的。
那么我们找到这条边,把换破开,按树来做。
如何找边?
可以发现,如果这条边要删掉,那么走了一圈之后这条边就不会有人经过了。
也就是说这个点是人数-需求的最小值的点。
设g[i]表示从任意点开始,到i中size[x]-1的和,那么最小的g[i]的i便是那条边的起点。
注意,有多个联通快。
建议使用bfs,小心爆栈!

Code

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define N 1000005
#define mo 1000000007
using namespace std;
typedef long long ll;
bool bz[N];
int f[N],r[N],q[N],n,x,mi,id,k,l;
ll ans,size[N];
int main() {freopen("interstellar.in","r",stdin);freopen("interstellar.out","w",stdout);scanf("%d",&n);ans=1;mi=0x7fffffff;fo(i,1,n) scanf("%d",&x),size[x]++;fo(i,1,n) scanf("%d",&f[i]),r[f[i]]++;fo(i,1,n) if (!r[i]) q[++q[0]]=i;while (l<q[0]) {r[f[q[++l]]]--;bz[q[l]]=1;if (!r[f[q[l]]]) q[++q[0]]=f[q[l]];}fo(i,1,q[0]) ans=ans*size[q[i]]%mo,size[f[q[i]]]+=size[q[i]]-1;fo(i,1,n) if (!bz[i]) {k=0;mi=0x7fffffff;id=0;for(x=i;!bz[x];x=f[x]) {bz[x]=1;k+=size[x]-1;if (mi>k) mi=k,id=x;}for(x=f[id];x!=id;x=f[x]) {ans=ans*size[x]%mo;size[f[x]]+=size[x]-1;}}printf("%lld",ans);
}

GDSOI 2016 T2 星际穿越相关推荐

  1. 「PKUSC2018」星际穿越 (70分做法)

    5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 27  Solved: 11 [Submit][Statu ...

  2. 天体物理学-星际穿越

    转载自: http://www.cnblogs.com/yangpf/p/4148488.html 确实非常喜欢这样的文章,简单的说明白了很多有意思的科学史.天体物理学啊天体物理学.. 以下是原文 本 ...

  3. 《星际穿越》初解析——一部空前绝后的史诗科学巨作

    http://movie.douban.com/review/7188759/ 星际穿越通篇没有一句多余的对白,也没有多余的一个镜头,169分钟超大信息量填满整部电影.这里我打算从两个方面去分析这部电 ...

  4. 星际穿越+降临+明日边缘?星际拓荒重新定义星际探索题材游戏

    丨重新定义星际探索题材游戏 当我们说起"星际探索游戏", 我们会想起精英:危险,会想起坎巴拉太空计划,会想起那个灾难开场但终于修好的无人深空,还有那个耗资几亿还没弄完的星际公民-- ...

  5. SpaceVR真的要上天,让你星际穿越不是梦

    世界首枚VR人造卫星明年将升空,在VR中体验星际穿越指日可待. 用VR体验游戏已经不算什么了,对于SpaceVR来说,他们的征途是浩瀚天空中的星辰大海.据了解,SpaceVR已经和NanoRacks( ...

  6. 星际穿越-网易python(简单数学公式)

    题目描述 航天飞行器是一项复杂而又精密的仪器,飞行器的损耗主要集中在发射和降落的过程,科学家根据实验数据估计,如果在发射过程中,产生了 x 程度的损耗,那么在降落的过程中就会产生 x2 程度的损耗,如 ...

  7. Python爬虫-爬取电影《星际穿越》评论并提取关键词

    我的个人博客:https://jmbaozi.top/ 这次选择了我最喜欢的电影<星际穿越>的短评,共爬取了500条评论,并且用jieba分词提取了100个关键词.程序文件点我查看 100 ...

  8. 星际穿越与计算机程序的多维空间

     与星际穿越表达的多维空间模型类似,每个进程生活在一维的地址空间中,偶尔通过如jump指令产生一维空间弯曲,导致指令的远近跳转,从而感受到了分段二维空间的存在:进程本身又可以通过虚拟内存的机制在外 ...

  9. 【转】恶评《星际穿越》

    恶评<星际穿越> <img src="http://www.yinwang.org/images/interstellar.png" height=400> ...

  10. 科技周:从火星着陆与科幻电影《星际穿越》看人机融合未来

    资料视频:第一届蓝星球科幻电影周片头.(新华网融媒体未来研究院制作) 2021年5月15日,"祝融号"火星车发回遥测信号,"天问一号"成功着陆火星乌托邦平原,红 ...

最新文章

  1. C#事件-使用事件需要的步骤
  2. 在jupyter notebook中同时安装python2和python3
  3. 信号与系统2021春季课程小论文批改
  4. 三年0故障是如何做到的?
  5. 关于STM32系统构架的一点见解
  6. 容器打印日志到控制台阻塞的排障
  7. [转]一个简单的反射拷贝一份新的实体类
  8. 【CCL】连通区域提取
  9. 面经 | 无论文、无实习拿下腾讯CV算法岗
  10. 软件测试(一)-黑盒测试 随机测试技巧
  11. unicode和MBCS(多字节字符集)的关系
  12. php制作多媒体课件,网络自主学习型多媒体课件设计与制作PPT.ppt
  13. CF1108D Diverse Garland
  14. 开源GPU显存虚拟化项目,你的2080Ti还能救一下
  15. 阿里P9李运华:架构到底是指什么?
  16. 简单说一说手机中常用的芯片-OVP芯片
  17. 正确率、召回率、F值例子
  18. 从零开始研发GPS接收机连载——9、跟踪调试之凤凰涅槃
  19. (裴蜀定理)ax + by = m 有解,当且仅当 m 是 gcd(a,b) 的倍数
  20. 鸿蒙系统3.0多大内存,鸿蒙2.0终于上机实测 多大内存能跑?

热门文章

  1. 你走后 爱情的遗址像是空城
  2. 上海是怎么错失这些年的互联网机遇的?——写的很好,转
  3. Windows下定时运行程序
  4. 开源免费cms---十大主流建站的CMS系统介绍
  5. 百度导航5.0之后的坑
  6. ipad为什么显示itunes store无法连接服务器,ipad无法连接itunes store怎么办
  7. 数学思维导图学习方法
  8. C++ 程序越过windows Defender检测
  9. ASEMI-PL3369C电源管理芯片IC作用和意义
  10. java最好用的浏览器_国内好的pc浏览器评测