Link:

BZOJ 1562 传送门

Solution:

一道比较考对$Hungry$算法理解的题目

首先可以轻松看出原序列和答案序列的对应关系,从而建出二分图匹配模型

下面的关键在于如何保证字典序最小

第一种方式是暴力逐位确定:

对于$1....n$每一位都先贪心选取字典序小的节点,判断将该边除去后能否完全匹配,不能再修改

但这样复杂度明显是$O(n^3)$

第二种方式是逆向匹配:

其实就是暴力贪心的思想,但逆序匹配后就不用判断了,省去了每次重复的判断:

从后往前对于每个点先选择字典序小的节点进行匹配,

由于这一位的权重比后面所有点的权重都大,因此在之前贪心的结果下尽量匹配当前点就是最优解

这样就将复杂度降到了$O(n^2)$

Code:

#include <bits/stdc++.h>

using namespace std;
const int MAXN=1e4+;
int n,x,mat[MAXN],res[MAXN],vis[MAXN],G[MAXN][],idx=; int dfs(int x)
{
vis[x]=idx;
for(int i=;i<;i++)
{
int m=mat[G[x][i]];
if(m==-||vis[m]!=idx&&dfs(m))
{mat[G[x][i]]=x;return ;}
}
return ;
} int main()
{
scanf("%d",&n);memset(mat,-,sizeof(mat));
for(int i=;i<n;i++)
{
scanf("%d",&x);
int a=(i-x+n)%n,b=(i+x)%n;
G[i][]=min(a,b);G[i][]=max(a,b);
} int sum=;
for(int i=n-;~i;i--,idx++) sum+=dfs(i);
if(sum!=n) return puts("No Answer"),; for(int i=;i<n;i++) res[mat[i]]=i;
for(int i=;i<n;i++) printf("%d ",res[i]);
return ;
}

[BZOJ 1562] 变换序列的更多相关文章

  1. BZOJ 1562 变换序列 二分图匹配+字典序

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1562 题目大意: 思路: 逆序匹配,加边匹配的时候保持字典序小的先加入. 具体证明:h ...

  2. BZOJ 1562 变换序列(二分图匹配)

    显然每个位置只有两个情况,所以用二分图最大匹配来求解. 如果二分图有完全匹配,则有解. 关键是如何求最小的字典序解. 实际上用匈牙利算法从后面开始找增广路,并优先匹配字典序小的即可. # includ ...

  3. Bzoj 1562: [NOI2009]变换序列 匈牙利算法,二分图匹配

    题目: http://cojs.tk/cogs/problem/problem.php?pid=409 409. [NOI2009]变换序列 ★★☆   输入文件:transform.in   输出文 ...

  4. BZOJ 1562 [NOI2009] 变换序列

    [NOI2009] 变换序列 [题解] 就是有一个序列,每个位置可以填两个数,不可重复,问最小字典序. 显然,可以建一个二分图,判合法就是找完美匹配. 那怎么弄最小字典序呢?有好多种解法,我这里给出了 ...

  5. 【bzoj1562】 NOI2009—变换序列

    http://www.lydsy.com/JudgeOnline/problem.php?id=1562 (题目链接) 题意 给出一个序列(0~n-1),这个序列经过某个变换会成为另外一个序列,但是其 ...

  6. bzoj1562[NOI2009]变换序列——2016——3——12

    任意门:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 题目: 对于0,1,…,N-1的N个整数,给定一个距离序列D0,D1,…,DN-1,定 ...

  7. 【BZOJ1562】【NOI2009】变换序列(二分图匹配)

    [BZOJ1562][NOI2009]变换序列 题面 BZOJ 洛谷 这题面写的是真的丑,还是先手动翻译成人话. 让你构造一个\(0..N-1\)的排列\(T\) 使得\(Dis(i,T_i)\)为给 ...

  8. 【NOI2009】Bzoj1562&Codevs1843 变换序列

    目录 List Description Input Output Sample Input Sample Output HINT Solution 官方题解%莫队 Code Position: htt ...

  9. [NOI 2009]变换序列

    Description 题库链接 对于 \(N\) 个整数 \(0, 1, \cdots, N-1\) ,一个变换序列 \(T\) 可以将 \(i\) 变成 \(T_i\) ,其中 \(T_i \in ...

随机推荐

  1. [Unity]用PropertyDrawer自定义struct/class的外观

    一般来说,当我们要扩展编辑器时,我们会从Editor类继承,为自己的MonoBehaviour实现不同的外观. 但是如果有一个struct/class,在许多地方被使用,Unity默认的外观又不够好看 ...

  2. C# 类内部添加索引器

    public class PersonTable : Indexer { public int xuhao { get; set; } public string name { get; set; } ...

  3. new操作符的内部运行解析

    在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassical. 基于上面的例子,我们执行如下代码   ...

  4. ribbon设置url级别的超时时间

    序 ribbon的超时设置,只能按转发的serviceId来分的,无法像nginx那样直接在每个转发的链接里头设置超时时间.这里hack一下,实现url基本的ribbon超时时间设置.具体的思路就是重 ...

  5. eureka服务端

    服务注册与发现——Eureka Eureka Server:服务的注册中心,负责维护注册的服务列表. Service Provider:服务提供方,作为一个Eureka Client,向Eureka ...

  6. Android开发中的各种尺度单位

    px 像素(pixel),表示屏幕上一个物理像素点 不建议直接使用 px 绘制UI,因为受像素密度的影响,以 px 为单位绘制的UI在不同手机上显示的实际大小会不同 dp   (用于定义控件大小) 密 ...

  7. 【转】使用SQL语句创建和删除约束

    转自http://blog.csdn.net/hamber_bao/article/details/6504905 约束的目的就是确保表中的数据的完整性. 常用的约束类型如下: 主键约束:(Prima ...

  8. 安装FFMpeg CentOS 7

    https://linuxadmin.io/install-ffmpeg-on-centos-7/

  9. hadoop入门学习

    hadoop入门学习:http://edu.csdn.net/course/detail/1397hadoop hadoop2视频:http://pan.baidu.com/s/1o6uy7Q6HDF ...

  10. FineReport——JS二次开发(分页预览)

    BS访问某个cpt模板,报表servlet将会将cpt文件解析成对应的html,报表内容最终转换为一个table,位于id=content-container的div中. 在模板和html页面中,他们 ...