CF612E Square Root of Permutation
题目分析
我们首先模拟一下题意
假设有一个 \(q _1\)
| \(p\) | \(a_1\) | \(a_x\) | \(a_{a_1}\) | \(a_{a_x}\) | 
|---|---|---|---|---|
| \(q\) | \(x\) | \(a_1\) | \(a_x\) | \(a_{a_1}\) | 
| \(pos\) | 1 | \(x\) | \(a_1\) | \(a_x\) | 
对这个表格分析,发现,当前节点的后继为前驱的对应
如果我们对 \(i \to p_i\) 建边,模拟一下,发现
偶环是会有两个环组成,而奇环会形成一个类似于五角星的图形
于是,我们可以找出所有环,对于奇环模拟即可,而偶环,拆分后再访问
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1000005];
int vis[1000005];
struct node{
	vector<int>vs;
}scc[1000005];
int cnt_block;
void dfs(int x,int key)
{
	if(vis[x])
	{
		return;
	}
	vis[x]=1;
	scc[key].vs.push_back(x);
	dfs(a[x],key);
}
bool cmp(node x,node y)
{
	return x.vs.size()<y.vs.size();
}
vector<int>temp;
int ans[1000005];
int pcd[1000005];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=n;i++)
	{
		if(!vis[i])
		{
			++cnt_block;
			dfs(i,cnt_block);
		}
	}
//
	sort(scc+1,scc+1+cnt_block,cmp);
	for(int i=1;i<=cnt_block;i++)
	{
	//	printf("%d\n",scc[i].vs.size());
		temp.clear();
		if(scc[i].vs.size()&1)
		{
			int mid = (scc[i].vs.size() + 1)/2;
			for (int j =1;j <= mid; j++)
			{
				pcd[(j*2)-1] = scc[i].vs[j-1];
			}
			for (int j = mid + 1;j <= scc[i].vs.size(); j++)
			{
				pcd[(j - mid)*2] =  scc[i].vs[j-1];
			 }
			for(int j=1;j<=scc[i].vs.size();j++)
			{
				ans[pcd[j]]=pcd[j+1];
			}
			ans[pcd[scc[i].vs.size()]]=pcd[1];
		}
		else
		{
			if(i==cnt_block)
			{
				printf("-1");
				return 0;
			}
			if(scc[i].vs.size()^scc[i+1].vs.size())
			{
				printf("-1");
				return 0;
			}
			for(int j=0;j<scc[i].vs.size();j++)
			{
				temp.push_back(scc[i].vs[j]);
				temp.push_back(scc[i+1].vs[j]);
			}
			for(int j=0;j<temp.size()-1;j++)
			{
				ans[temp[j]]=temp[j+1];
			}
			ans[temp[temp.size()-1]]=temp[0];
			i++;
		}
	}
	for(int i=1;i<=n;i++)
	{
		printf("%d ",ans[i]);
	}
}												
											CF612E Square Root of Permutation的更多相关文章
- Codeforces 612E - Square Root of Permutation
		
E. Square Root of Permutation A permutation of length n is an array containing each integer from 1 t ...
 - Square Root of Permutation - CF612E
		
Description A permutation of length n is an array containing each integer from 1 to n exactly once. ...
 - codefroces 612E Square Root of Permutation
		
A permutation of length n is an array containing each integer from 1 to n exactly once. For example, ...
 - [CF 612E]Square Root of Permutation
		
A permutation of length n is an array containing each integer from 1 to n exactly once. For example, ...
 - Codeforces.612E.Square Root of Permutation(构造)
		
题目链接 \(Description\) 给定一个\(n\)的排列\(p_i\),求一个排列\(q_i\),使得对于任意\(1\leq i\leq n\),\(q_{q_i}=p_i\).无解输出\( ...
 - Codeforces 715A. Plus and Square Root[数学构造]
		
A. Plus and Square Root time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
 - Project Euler 80:Square root digital expansion 平方根数字展开
		
Square root digital expansion It is well known that if the square root of a natural number is not an ...
 - Codeforces 715A & 716C Plus and Square Root【数学规律】 (Codeforces Round #372 (Div. 2))
		
C. Plus and Square Root time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
 - (Problem 57)Square root convergents
		
It is possible to show that the square root of two can be expressed as an infinite continued fractio ...
 
随机推荐
- Windows 下 Node.js 开发环境搭建
			
1.利用CentOS Linux系统自带的yum命令安装.升级所需的程序库: sudo -s LANG=C yum -y install gcc gcc-c++ autoconf libjpeg li ...
 - 面渣逆袭:Java集合连环三十问
			
大家好,我是老三.上期发布了一篇:面渣逆袭:HashMap追魂二十三问,反响很好! 围观群众纷纷表示 不写,是不可能不写的,只有卷才能维持了生活这样子. 当然,我写的这一系列,不是背诵版,是理解版,很 ...
 - 为什么在集合中不能使用int关键字作为类型
			
解释: 1.Int是基本数据类型,Integer是Int的引用类型,定义集合的时候不能使用基本数据类型,需要使用对应的引用类型 2.int是基本数据类型,Integer是他的包装类,包装类主要用在类型 ...
 - Gitlab用户在组中有五种权限
			
Gitlab用户在组中有五种权限:Guest.Reporter.Developer.Master.Owner Guest:可以创建issue.发表评论,不能读写版本库 Reporter:可以克隆代码, ...
 - Apache Log4j 远程代码执行漏洞源码级分析
			
漏洞的前因后果 漏洞描述 漏洞评级 影响版本 安全建议 本地复现漏洞 本地打印 JVM 基础信息 本地获取服务器的打印信息 log4j 漏洞源码分析 扩展:JNDI 危害是什么? GitHub 项目 ...
 - 项目集成seata和mybatis-plus冲突问题解决方案:(分页插件失效, 自动填充失效, 自己注入的id生成器失效 找不到mapper文件解决方案)
			
项目集成seata和mybatis-plus,seata与mybatis-plus冲突问题(所有插件失效,自动填充失效,找不到mapper文件解决方案) 自动填充代码: package com.fro ...
 - [BUUCTF]PWN——pwnable_start
			
pwnable_start 附件 步骤: 例行检查,32位程序,什么保护都没开,首先想到的是ret2shellcode的方法 本地试运行一下,看看程序大概的情况 32位ida载入,没法f5,好在汇编不 ...
 - Niushop开源商店渗透测试
			
靶机 提取码:le8l 首先连上靶机 先扫一下靶场ip,看看开启了哪些端口 开启了80端口,扫描一下目录 一个shop的界面, 一个admin后台管理界面 其他的目录翻看了一下, 看样子是网站的配置文 ...
 - [BUUCTF]REVERSE——SimpleRev
			
SimpleRev 附件 步骤: 例行查壳儿,,无壳,64位程序 64位ida载入,看main函数 关键代码段在Decry函数里 unsigned __int64 Decry() { char v1; ...
 - 突破结构限制的“数据透视表”(Excel技巧集团)
			
出个题:根据A2:C16生成E2:G18的汇总结果.这里的汇总是求和. 遇到这种情况,首选肯定是函数公式,虽然数据源表是个很规范的一维表,可以用数据透视表,可是想建构到上图那么奇葩,数据透视表无此异能 ...