/*
HDU 6038 - Function [ 置换,构图 ]
题意:
给出两组排列 a[], b[]
问 满足 f(i) = b[f(a[i])] 的 f 的数目
分析:
假设 a[] = {2, 0, 1}
则 f(0) = b[f(2)]
f(1) = b[f(0)]
f(2) = b[f(1)]
即 f(0) = b[b[b[f(0)]]]
f(1) = b[b[b[f(1)]]]
f(2) = b[b[b[f(2)]]]
由于将 a[i]->i 连边可以得到不相交的多个循环
可以看出对于 a[] 中的每一个循环,满足条件 f 的个数即 b[] 中循环长度为其循环长度约数的循环
故对于a中每个循环,找出b中循环长度为其长度的约数的循环个数,再把每个循环的个数乘起来
*/
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const LL MOD = 1e9+7;
const int N = 1e5+5;
int n, m;
int a[N], b[N];
int fa[N], fb[N];
int sa[N], sb[N];
int num[N];
int sf(int x, int f[]) {
return x == f[x] ? x : f[x] = sf(f[x], f);
}
int main()
{
int tt = 0;
while (~scanf("%d%d", &n, &m))
{
for (int i = 0; i <= max(n, m); i++)
{
fa[i] = fb[i] = i;
sa[i] = sb[i] = num[i] = 0;
}
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
fa[sf(i,fa)] = sf(a[i], fa);
}
for (int i = 0; i < m; i++) {
scanf("%d", &b[i]);
fb[sf(i,fb)] = sf(b[i], fb);
}
for (int i = 0; i < n; i++) sa[sf(i, fa)]++;
for (int i = 0; i < m; i++) sb[sf(i, fb)]++;
for (int i = 0; i < m; i++) num[sb[i]]++;
LL ans = 1;
for (int i = 0; i < n; i++)
{
if (sa[i])
{
LL cnt = 0;
for (int j = 1; (LL)j*j <= sa[i]; j++)
{
if (sa[i] %j == 0)
{
int k = sa[i] / j;
cnt = (cnt + (LL)j*num[j]) % MOD;
if (k != j) cnt = (cnt + (LL)k*num[k]) % MOD;
} }
ans = ans * cnt % MOD;
}
}
printf("Case #%d: %lld\n", ++tt, ans);
}
}

  

HDU 6038 - Function | 2017 Multi-University Training Contest 1的更多相关文章

  1. HDU 6038 Function —— 2017 Multi-University Training 1

    Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total ...

  2. 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】

    Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  3. hdu 6038 Function

    Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  4. hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 Fighting the Landlords Time Limit: 2000/1000 MS ...

  5. HDU 6168 - Numbers | 2017 ZJUT Multi-University Training 9

    /* HDU 6168 - Numbers [ 思维 ] | 2017 ZJUT Multi-University Training 9 题意: .... 分析: 全放入multiset 从小到大,慢 ...

  6. HDU 5726 GCD (2016 Multi-University Training Contest 1)

      Time Limit: 5000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Description Give y ...

  7. HDU 5360 Hiking(优先队列)2015 Multi-University Training Contest 6

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  8. HDU 6038 Function(思维+寻找循环节)

    http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意:给出两个序列,一个是0~n-1的排列a,另一个是0~m-1的排列b,现在求满足的f的个数. 思路: ...

  9. hdu 6394 Tree (2018 Multi-University Training Contest 7 1009) (树分块+倍增)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=6394 思路:用dfs序处理下树,在用分块,我们只需要维护当前这个点要跳出这个块需要的步数和他跳出这个块去 ...

随机推荐

  1. pb datawindow 类型

    DataWindow.Processing 判断 DataWindow 对象的类型 可用 DataWindow.Processing 判断 DataWindow 对象的类型,dw的类型如下:     ...

  2. 启动Tomcat

    这篇随笔的重点关注启动Tomcat时会用到的两个类,分别是Catalina类 和 Bootstrap类,它们都位于org.apache.catalina.startup包下,Catalina类用于启动 ...

  3. 【转】js小数转百分比

    转自:js小数和百分数的转换 function toPercent(point){ var str=Number(point*100).toFixed(1); str+="%"; ...

  4. websocket vue

    /* eslint-disable */ let tt; let count = 1; let lockReconnect = false; function isJsonString(str) { ...

  5. 树莓派SD卡安装系统后扩容——实测简单高效

    接上一篇博客安装了树莓派64位的系统,如果需要安装桌面等其他操作会面临文件系统分区空间紧张的局面,扩容方法如下: 在ubuntu上安装 gparted工具可以对SD卡重新分区 $sudo apt-ge ...

  6. wpf之二进制资源

    一.当需要添加图片.音频.视屏的资源到wpf项目里是,可以直接把文件添加到项目里 右击add->existing item. 1.如果想将外部文件编异常目标成为二进制资源,在文件的属性窗口 Bu ...

  7. OGG学习笔记01

    OGG学习笔记01-基础概述OGG(Oracle Golden Gate),最近几年在数据同步.容灾领域特别火,甚至比Oracle自己的原生产品DataGuard还要风光,主要是因为其跨平台.跨数据库 ...

  8. ActiveMQ入门操作示例

    1. Queue 1.1 Producer 生产者:生产消息,发送端. 把jar包添加到工程中. 第一步:创建ConnectionFactory对象,需要指定服务端ip及端口号. 第二步:使用Conn ...

  9. Windows地址栏的妙用

    主角: 它就是windows自带的一个小工具->地址栏,可以通过在任务栏右键选择工具栏-地址栏添加使用. 妙用: 一.打开文件 使用方法:D:\Temp(文件路径) 小提示:快速进入回收站:Re ...

  10. SokcetClient VC++6.0

    // SokcetClient.cpp: implementation of the SokcetClient class. // ////////////////////////////////// ...