博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 691D Swaps in Permutation(并查集)
阅读量:6370 次
发布时间:2019-06-23

本文共 990 字,大约阅读时间需要 3 分钟。

题意:

给你一个长度为n的数列,然后给你m组数,

表示这两个数可以交换

然后让你给出字典序最大的数列

思路:

用并查集,可交换的数都是成组的,把同一并查集中的数加在根节点的vector后,

在一个并查集中的数,从大到输出就好了

/* ***********************************************Author        :devil************************************************ */#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e6+10;int a[N],pre[N],cnt[N];vector
eg[N];int find(int x)//查找根节点{ int r=x; while(pre[r]!=r)//返回根节点r r=pre[r]; int i=x,j; while(i!=r)//路径压缩 { j=pre[i];//在改变上级之前用临时变量j记录下他的值 pre[i]=r;//把上级改为根节点 i=j; } return r;}void join(int x,int y)//判断x,y是否连通.如果已经连通,就不用管了;如果不连通,就把它们所在的连通分支合并起{ int fx=find(x),fy=find(y); if(fx!=fy) pre[fx]=fy;}int main(){ //freopen("in.txt","r",stdin); int n,m,x,y; scanf("%d%d",&n,&m); for(int i=0;i
()); } for(int i=0;i

 

转载于:https://www.cnblogs.com/d-e-v-i-l/p/5697130.html

你可能感兴趣的文章
Maven——学习(1):基础概念
查看>>
Java中HashMap,LinkedHashMap,TreeMap的区别
查看>>
iPhone消息推送机制实现与探讨(转)
查看>>
iphone 线程 NSCondition NSThread
查看>>
Debian8添加kali源并安装metasploit
查看>>
Linux redhat 5.7 安装 Teamviewer7
查看>>
android EditText inputType说明
查看>>
在mac os中用http_load,valgrind和xdebug来分析php程序
查看>>
centos 安装Audacious 播放器
查看>>
交叉熵代价函数(作用及公式推导)
查看>>
如何配置PostgreSQL允许被远程访问
查看>>
Spring中property-placeholder的使用与解析
查看>>
触发器学习之入门(增、删、改、增删改)
查看>>
Python3操作oracle数据库及遇到的报错
查看>>
gcc -I -L -l区别
查看>>
windows7提示“没有文件扩展.vbs的脚本引擎”的解决方法
查看>>
2.2Python基础语法(二)之运算符
查看>>
我的友情链接
查看>>
df du 命令和磁盘分区介绍的用法介绍
查看>>
【Android必备】Parcelables and Bundles(6)
查看>>