首页 > 其他分享 >洛谷 P2582 函数

洛谷 P2582 函数

时间:2022-08-26 20:56:25浏览次数:81  
标签:洛谷 函数 int gx P2582 Maxn size

函数 - 洛谷

可以发现性质 \(g(f^m(x))=f^m(g(x))\) 。

若设左侧 \(x\) 所在环大小为 \(size(x)\) ,右侧 \(g(x)\) 所在环的大小为 \(size(gx)\) 。

可以得到,\(size(gx)\mid size(x)\) 。

这是因为左侧下标呈循环,右侧的值呈循环,若环的大小不满足 \(size(gx)\mid size(x)\) ,必然会出现矛盾。

于是我们首先 \(O(n)\) 求出每个环的大小,枚举约数计算最小满足条件的 \(g(x)\) 即可,然后后面的数就可以迭代填出。

#include <bits/stdc++.h>
const int Maxn = 8e5 + 5;
int n, f[Maxn], g[Maxn], sz[Maxn], num[Maxn];
bool vis[Maxn];
int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &f[i]);
    for (int i = 1; i <= n; i++)
    {
        if (vis[i]) continue;
        int x = i, cnt = 0;
        do {x = f[x], ++cnt;} while(x != i);
        do {x = f[x]; sz[x] = cnt; vis[x] = true;} while(x != i);
        if (!num[cnt]) num[cnt] = x;
    }
    memset(vis, 0, sizeof(vis));
    for (int i = 1; i <= n; i++)
    {
        if (vis[i]) continue;
        int sav = 0x3f3f3f3f;
        for (int j = 1; j * j <= sz[i]; j++)
        {
            if (sz[i] % j == 0)
            {
                if (num[j]) sav = std::min(sav, num[j]);
                if (j * j != sz[i] && num[sz[i] / j])
                    sav = std::min(sav, num[sz[i] / j]);
            }
        }
        int x = i;
        do {g[x] = sav, vis[x] = true, x = f[x], sav = f[sav]; } while(x != i);
    }
    for (int i = 1; i <= n; i++)
        printf("%d ", g[i]);
    return 0;
}

标签:洛谷,函数,int,gx,P2582,Maxn,size
From: https://www.cnblogs.com/mklzc/p/16629240.html

相关文章

  • C语言字符串处理函数 gets()和fgets()的区别及使用
    字符串函数(Stringprocessingfunction)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数。本文主要介绍C语言中符串处理函数gets()和fgets()的区别使用方法,......
  • 【pytest】Hook钩子函数完整API总结
    pytest的钩子函数有很多,通过钩子函数的学习可以了解到pytest在执行用例的每个阶段做什么事情,也方便后续对pytest二次开发学习。详细文档可以查看pytest官方文档https://d......
  • C++ 内联函数
    1.函数的作用:避免重复制造轮子。(避免重复多次写相同的代码)2.函数的缺点:每调用一次函数,就会为这个函数分配一个“栈”,在计算机底层做很多准备工作(保护原来的执行环境,切换......
  • python基础-函数的进阶
    python基础-函数的进阶 一.函数参数--动态传参之前我们说过了传参,如果我们需要给一个函数传参, 而参数又是不确定的.或者我给一个函数传很多参数,我的形参就......
  • python基础-函数
    python基础-函数 一.什么是函数1.我们到目前为止,已经可以完成一些软件的基础功能了.那么我们来完成这样一个功能:约会:  ok.soeasy.我们已经完成了对......
  • container of()函数简介
       在linux内核编程中,会经常见到一个宏函数container_of(ptr,type,member),但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀?函数还可以这......
  • SparkCore系列(四)函数大全
    有了上面三篇的函数,平时开发应该问题不大了。这篇的主要目的是把所有的函数都过一遍,深入RDD的函数RDD函数大全数据准备        val sparkconf = new Spa......
  • python3 函数 定义函数与切片
     如果我们要计算一个圆的面积,就是3.14*r*r,如果每次就算,则每次都要写一遍,就很麻烦,所以有了函数,我们就可以通过调用函数的方法,直接使用就行了。 这里我们可以访问 ......
  • 如何把thinkphp5的项目迁移到阿里云函数计算来应对流量洪峰?
    原文链接:https://developer.aliyun.com/article/9827461.为什么要迁移到阿里云函数?我的项目是一个节日礼品领取项目,过节的时候会有短时间的流量洪峰。平时访问量很低。......
  • Lazars常用函数
    var i: Integer; Row: String; Parts: TStringArray; S1, S2, S3, S4: String;begin Row :=  '51,40,45,44,44,40,'; Parts......