/*
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. 【转帖】Linux的桌面环境gnome、kde、xfce、lxde 等等使用比较

    Linux的桌面环境gnome.kde.xfce.lxde 等等使用比较 https://www.cnblogs.com/chenmingjun/p/8506995.html 文章目录 图形界面架起用 ...

  2. 【LOJ】#3030. 「JOISC 2019 Day1」考试

    LOJ#3030. 「JOISC 2019 Day1」考试 看起来求一个奇怪图形(两条和坐标轴平行的线被切掉了一个角)内包括的点个数 too naive! 首先熟练的转化求不被这个图形包含的个数 -- ...

  3. Log4j2配置之Appender详解

    Log4j2配置之Appender详解 Appender负责将日志事件传递到其目标.每个Appender都必须实现Appender接口.大多数Appender将扩展AbstractAppender,它 ...

  4. gitignore忽略处理

    .gitignore文件内容 忽略所有文件夹 /*/ 忽略所有文件 /* 这时  git add  已经失效 需要使用  git add -f  强制添加文件进版本库 好处在于在本地添加文件文件夹时, ...

  5. Codeforces 1244E. Minimizing Difference

    传送门 首先减的顺序是无关紧要的,那么有一个显然的贪心 每次减都减最大或者最小的,因为如果不这样操作,最大的差值不会变小 那么直接把序列排序一下然后模拟一下操作过程即可,别一次只减 $1$ 就好 #i ...

  6. DVWA之SQL注入演练(low)

    1.设置 把安全等级先调整为low,让自己获得点信心,免得一来就被打脸. 2.测试和分析页面的功能       这里有一个输入框 根据上面的提示,输入用户的id.然后我们输入之后,发现它返回了关于这个 ...

  7. LINUX中lrzsz软件的使用

    安装lrzsz 可以在Linux 和 windows直接相互传文件 Linux无论ssh跳过去也可以sz rz打开图像进行传输文件 [root@master2 ~]# yum install lrzs ...

  8. SmartBinding与kbmMW#2

    前言 在之前的文章中,我介绍了SmartBinding作为Delphi的一个新的易于使用和智能的绑定框架.介绍了包括绑定对象,列表,常规数据和可视控件,以及如何使用导航器,所有这些都用代码做了演示. ...

  9. postman安装时提示打不开

    安装postman6.6.1时,提示打不开,如下图: 解决办法: 1.找到以下两个路径直接删除文件,注安装路径不同有可能不同 C:\Users\Administrator\AppData\Roamin ...

  10. sql DATEDIFF 函数

    sql  DATEDIFF 函数 今天的所有数据: 昨天的所有数据: 7天内的所有数据: 30天内的所有数据: 半个月的所有数据: 本月的所有数据: 上月的所有数据: 本年的所有数据: --查询今天是 ...