pat1067 在离散数学中置换群思想上可用并查集和递归两种方法求解问题
1.递归求解 注:叙述时 节点其实就是数字0-N-1
!!!最好用一个数组记录0-N-1每个数字的位置
!!!递归计算一个置换群内部的节点数 分为两种情况 累加M,M即是一个置换群所有数字在正确位置上所需要的swap 次数。这句话
需要详细解释下,如果这个置换群里面有0则M=置换群节点数量-1(找一个测试样例,自行模拟);如果这个置换群里面没有0,则M=置换群节点数量+1
!!!vis记录是否该节点已经被放在正确的位置
!!!剩下就没什么可说的了 参考了https://www.cnblogs.com/biaobiaoqi/p/3357228.html
#include <iostream>
using namespace std;
int arr[100000+5];
bool vis[100000+5]={0};
bool zero;
int M;//循环链节点个数
int cnt=0;//交换次数
void dfs(int v){
if(v!=0&&vis[v]){
return;
}
if (v==0)
zero=1;
vis[v]=1;
M++;
//cout<<M<<"***"<<zero<<endl;
dfs(arr[v]);
}
int main(){
int N,temp,ans=0,num=0;
scanf("%d",&N);
for (int i=0;i<N;i++){
scanf("%d",&temp);
arr[temp]=i;
}
for (int i=0;i<N;i++){
zero=0;
M=0;
if (i!=0&&!vis[i]&&arr[i]!=i){
dfs(i);
if (zero==1){
cnt+=M-1;
}
else{
cnt+=M+1;
}
}
}
cout<<cnt;
}
2.并查集 先欠着 后续再说 (其实能解决是解决 ,感觉递归计算更直观)
pat1067 在离散数学中置换群思想上可用并查集和递归两种方法求解问题的更多相关文章
- C#统计给定的文本中字符出现的次数,使用循环和递归两种方法
前几天看了一个.net程序员面试题目,题目是”统计给定的文本中字符出现的次数,使用循环和递归两种方法“. 下面是我对这个题目的解法: 1.使用循环: /// <summary> /// 使 ...
- Oracle中,将毫秒数转换为timestamp类型的两种方法
在许多场景中,开发人员习惯用1970-01-01 00:00:00.000以来的毫秒数来表示具体的时间,这样可以将数据以NUMBER类型存储到数据库中,在某些时候方便比较,同样,有些时候我们需要 把这 ...
- upload控件上传json文件合并的两种方法
方法一: byte[] byte1 = FileUpload1.FileBytes; byte[] byte2 = FileUpload2.FileBytes; byte[] a1 = Encodin ...
- Shell中 调用/引用/包含 另外的脚本文件的两种方法
脚本 first (测试示例1) #!/bin/bash echo 'your are in first file' 问)在当前脚本文件中调用另外一个脚本文件? 方法一: 使用 source 脚本 s ...
- asp.net中TextBox只能输入数字的最简洁的两种方法
如下TextBox <asp:textboxonkeypress="isnum()"id="TextBox1"runat="server&quo ...
- GitHub常用上传文件的两种方法 附带常见的问题及Git安装教程
从早上下课到现在一直在琢磨如何给Github下载本地文件,中午饭都没吃.还好是解决了,感觉挺有成就感的.O(∩_∩)O哈哈~ 好哒 闲话不说,说重点. 一.git的安装 百度云:http://pan. ...
- 在C++中定义常量的两种方法的比较
常量是定以后,在程序运行中不能被改变的标识符.C++中定义常量可以用#define .const 这两种方法.例如:#define PRICE 10 //定义单价常量10const int PRICE ...
- Endnote在latex中的应用的两种方法
从endnote中向latex文档批量插入参考文献的两种方法 一.若是latex模板中参考文献编写的命令是: \begin{thebibliography} \bibitem{lab1}LIU M L ...
- HTML中禁用表单控件的两种方法readonly与disabled
时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的,下面与大家分享下禁用表中控件的两种方法 在网页的制作过程中,我们会经常使用到表单.但是有时候我 ...
随机推荐
- JAVA RPC (六) 之thrift反序列化RPC消息体
我们来看一下服务端的简单实现,直接上thrift代码,很直观的来看一看thrift的server到底干了些什么 public boolean process(TProtocol in, TProtoc ...
- nvwgf2umx.dll 显卡崩溃问题尝试修复
问题背景 游戏上线之后,搜集到的奔溃列表里面列表存在大量的显卡驱动异常崩溃,window在vista之后,将显卡驱动模型从Xpdm改为了WDDM. WDDM的说明详见百度百科,其中最主要的变更如下: ...
- RF - selenium - 常用关键字 - 示例
1. 打开浏览器 Open Browser http://www.baidu.com chrome 2. 关闭浏览器 Close Browsers Close All Browser 3. ...
- 2PC/3PC/Paxos
在分布式系统中,一个事务可能涉及到集群中的多个节点.单个节点很容易知道自己执行的事务成功还是失败,但因为网络不可靠难以了解其它节点的执行状态(可能事务执行成功但网络访问超时). 若部分节点事务执行失败 ...
- 反射的应用,jdbc封装
实现在Java中查询数据库并保存在Java中 1.创建Dept类(要查找的类) package cn.ljs; public class Dept { private int deptno; priv ...
- scrapy_redis实现爬虫
1.scrapy_redis的流程 在scrapy_redis中,所有的带抓取的对象和去重的指纹都存在所有的服务器公用的redis中 所有的服务器公用一个redis中的request对象 所有的req ...
- datetime 计算时间差
计算时间差: .date() # 格式化 .timedelta() # 时间差 import datetime # 今天 today = datetime.datetime ...
- MyBatis基本使用
MyBatis是轻量级的数据库访问API,封装了JDBC操作,可以实现对实体对象的CRUD操作. MyBatis体系结构主要组成部分: 配置文件:SqlMapConfig.xml 主配置文件 ...
- 谷歌AM HTML视频代码amp-video示例
ntroduction Use amp-video to embed videos into your AMP HTML files. Video source files must be serve ...
- iOS 高级去水印,涂鸦去水印
目前在研究一下图像的处理,看了一下相关的软件,比如:<去水印大师>,究竟去水印是怎么处理的呢?看图分析. 一共是三个功能:快速去水印.高级去水印.涂鸦去水印 快速去水印:暂时没找到好的处理 ...