[AT2306]Rearranging(拓扑序)
只有luogu
题面(luogu):
有一个$n$个数组成的序列$a_{i}$。
高桥君会把整个序列任意排列,然后青木君可以选择两个相邻的互质的数交换位置。
高桥君希望最终序列的字典序尽量小,而青木君希望字典序尽量大。求最终序列。
思路:
经过一番思考,我们发现我们可以知道的只有“不互质的数之间不能交换”
换句话说也就是两个不互质的数之间的先后是不会反转的
但通过这个我们无法得到任何推论。。。
所以只能从这个唯一条件下手了。
考虑将不互质的数连未定向边
拓扑序就是这几个元素之间的相互顺序。
单个连通块里的处理:
找到连通块里最小的一个元素作为起点之后每次找相连的最小元素继续搜。
所以还请注意一下开始连边的枚举顺序。
多个连通块:
一个堆搞定。
#include<cstdio> #include<algorithm> #include<queue> #include<vector> using namespace std; const int N=2333; int a[N]; int g[N][N]; int n; int gcd(int a,int b){return b?gcd(b,a%b):a;} struct sumireko{int to,ne;}e[N*1000]; int he[N],ecnt; void addline(int f,int t) {e[++ecnt].to=t;e[ecnt].ne=he[f];he[f]=ecnt; } bool vv[N]; int bi; int sp[N]; vector<int> to[N]; void dfs(int x) {vv[x]=1;for(int i=he[x],t;i;i=e[i].ne){t=e[i].to;if(!vv[t]){to[x].push_back(t);dfs(t);}} } priority_queue<int> q; int main() {freopen("rearranging.in","r",stdin);freopen("rearranging.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);sort(a+1,a+1+n);for(int i=n;i;i--)for(int j=i-1;j;j--)if(gcd(a[i],a[j])!=1)addline(i,j),addline(j,i);for(int i=1;i<=n;i++) if(!vv[i]){bi++;sp[bi]=i;dfs(i);}for(int i=1;i<=bi;i++)q.push(sp[i]);while(!q.empty()){int g=q.top();q.pop();printf("%d ",a[g]);for(int i=0;i<to[g].size();i++) q.push(to[g][i]);}return 0; }
View Code
转载于:https://www.cnblogs.com/rikurika/p/11314890.html
[AT2306]Rearranging(拓扑序)相关推荐
- 解题报告:NOIP2013 车站分级(拓扑序递推求解差分约束、建图优化O(n+m)) 超详细讲解
本题是2013年NOIP普及组的压轴题 差分约束裸题. 计算当前线路中最小的级别(比较始发站和终点站). 整条线路中所有大于这个级别的都必须停靠 所有未停靠的站点的级别一定小于这个级别 也就是说所有未 ...
- hdu3342 拓扑序
题意:一个QQ群里面有一群大神,他们互相帮助解决问题,然后互相膜拜,于是有些人就称别人是他师父,现在给出很多师徒关系,问是否有矛盾 拓扑序,按师徒关系建边直接拓扑序就行了. 1 #include< ...
- BZOJ3832 [Poi2014]Rally 【拓扑序 + 堆】
题目链接 BZOJ3832 题解 神思路orz,根本不会做 设\(f[i]\)为到\(i\)的最长路,\(g[i]\)为\(i\)出发的最长路,二者可以拓扑序后\(dp\)求得 那么一条边\((u,v ...
- Weights Assignment For Tree Edges 树,拓扑序(1500)
题意 : 给定n个结点的树和序列bbb和ppp,bib_ibi表示i结点的父节点,其中broot=rootb_{root}=rootbroot=root,现在要给树上的每个边赋正权值,使得每个结点 ...
- 字典序最小是什么意思_《拓扑序简介》第十六讲
这是民科+大忽悠+地摊报告,我准备把拓扑序吹成天上有地上无.人见人爱.老幼咸宜.不买会后悔的什么东西.珍惜青春,珍惜钱包,请大家谨慎对待大忽悠.下面是回放视频的链接. 蔻享--共享科学.传播科学ww ...
- CF1385E Directing Edges 拓扑序
传送门 文章目录 题意: 思路: 题意: 给你一个图和若干个边,有些是有向边,有些是无向边,让你给无向边定向,使得最终的图是DAGDAGDAG. 思路: 题目让构造DAGDAGDAG,比较容易想到拓扑 ...
- HDU - 1811 Rank of Tetris 并查集 + 拓扑序 +me
link 题意: 首先看到排名自然想到拓扑序,但是存在等于的情况,这就启发我们把等于的情况缩成一个点,让后在缩点后的图中进行拓扑即可. 对于不合法的情况当然是拓扑序没有遍历到应该遍历的点,所以只需要检 ...
- 【图论训练】最小拓扑序
最小拓扑序 topsort.pas/c/cpp [题目描述] 给一个有向无环图,求其字典序最小的拓扑序. 一个拓扑序被认为字典序{pi}最小当且仅当对于任何其他拓扑序{qi},均存在正整数k,使得对于 ...
- hihocoder 1457 : 后缀自动机四·重复旋律7(后缀自动机+拓扑序BFS)
#1457 : 后缀自动机四·重复旋律7 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成 ...
- 【XSY3325】社保(拓扑序)
显然我们先缩点,之后转化为一个 DAG,设为 GGG,设由其反边构成的图为 G′G'G′.题意就是求所有 "好的" 点,其中一个 "好的" 点需要满足这个点在 ...
最新文章
- c# 取 list前100条数据
- 【温故而知新-Javascript】使用 Ajax(续)
- mysql解释器_atitit.java解析sql语言解析器解释器的实现
- 再聊一次值类型和引用类型
- 【数据结构与算法】非森林版并查集V2.1的Java实现
- SpringBoot :cannot be cast to org.springframework.web.accept.ContentNegotiationManager
- 操作系统之进程管理:11、用信号量机制实现进程同步、互斥、前驱关系
- VGGNet原理和实现
- 通用型CRM还是行业型CRM?-定制为王
- 要想下班早,微服务架构少不了
- 【然天一】随机读写(4k)百盘天梯
- 锐捷交换机配置命令大全_锐捷交换机常用配置命令汇总
- datetimepicker一个不错的日历android特效
- Windows Message ID 常量列表
- 【muduo源码分析 】 MutexLock和MutexLockGuard封装
- 安卓手机上跑_直接在电脑上浏览操作安卓手机 #效率App #scrcpy
- 【OpenCV学习笔记】【函数学习】十九(感兴趣区域)
- sql计算表中计算机的最高分,关于SQL查询面试题,会这些基本够用了
- 【移动安全技术】_安卓逆向5:绕过单机游戏的商店支付
- python中的ide是什么意思_用于Python的IDE是什么?