HDU 6038 - Function | 2017 Multi-University Training Contest 1
/*
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的更多相关文章
- HDU 6038 Function —— 2017 Multi-University Training 1
Function Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total ...
- 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 ...
- hdu 6038 Function
Function Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- 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 ...
- HDU 6168 - Numbers | 2017 ZJUT Multi-University Training 9
/* HDU 6168 - Numbers [ 思维 ] | 2017 ZJUT Multi-University Training 9 题意: .... 分析: 全放入multiset 从小到大,慢 ...
- HDU 5726 GCD (2016 Multi-University Training Contest 1)
Time Limit: 5000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Description Give y ...
- 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 ...
- HDU 6038 Function(思维+寻找循环节)
http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意:给出两个序列,一个是0~n-1的排列a,另一个是0~m-1的排列b,现在求满足的f的个数. 思路: ...
- hdu 6394 Tree (2018 Multi-University Training Contest 7 1009) (树分块+倍增)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=6394 思路:用dfs序处理下树,在用分块,我们只需要维护当前这个点要跳出这个块需要的步数和他跳出这个块去 ...
随机推荐
- 详解vue 路由跳转四种方式 (带参数)
详解vue 路由跳转四种方式 (带参数):https://www.jb51.net/article/160401.htm 1. router-link ? 1 2 3 4 5 6 7 8 9 10 ...
- 洛谷 P2018 消息传递 题解
题面 总体来说是一道从下往上的DP+贪心: 设f[i]表示将消息传给i,i的子树全部接收到所能消耗的最小时间: 那么对于i的所有亲儿子节点j,我们会贪心地先给f[j]大的人传递,然后次大..... 可 ...
- C语言一行太长的换行处理
转载:https://blog.csdn.net/baiqishijkh/article/details/79236202 在C语言程序编写中,我们有时会遇到一行代码太长而影响阅读或者出现与部分公司或 ...
- 使用python连接mysql数据库——pymysql模块的使用
安装pymysql pip install pymysql 使用pymysql 使用数据查询语句 查询一条数据fetchone() from pymysql import * conn = conne ...
- ubuntu 系统升级
1.更新软件源和软件 $ sudo apt-get update && sudo apt-get dist-upgrade 2.安装update-manager-core $ sudo ...
- 并不对劲的CF1239B&C&D Programming Task in the Train to Catowice City
CF1239B The World Is Just a Programming Task 题目描述 定义一个括号序列s是优秀的,当且仅当它是以下几种情况的一种: 1.|s|=0 2.s='('+t+' ...
- Scala学习九——文件和正则表达式
一.本章要点 Source.fromFile(...).getLines.toArray输出文件的所有行; Source.fromFile(...).mkString以字符串形式输出文件内容; 将字符 ...
- python获取文件及文件夹大小
Python3.3下测试通过 获取文件大小 使用os.path.getsize函数,参数是文件的路径 获取文件夹大小 import os from os.path import join, getsi ...
- vue使用scss应该安装哪些依赖
通过vue-cli搭建的项目如果想使用scss的话除了安装sass-loader,还需要安装node-sass cnpm install sass-loader node-sass -D
- maven入门-- part1 简介
Maven是什么 maven是基于项目对象模型(pom:project object model),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具.对依赖关系的特性进行细致的分析和划 ...