Description

Input

Output

Sample Input

5
1 1 2 2 1

Sample Output

1 2 4 0 3

HINT

30%的数据中N≤50;
60%的数据中N≤500;
100%的数据中N≤10000。

匈牙利裸题
因为要注意字典序
所以加边还有find的时候要注意一下先后顺序

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define N (10000+100)
using namespace std;
struct node
{
int to,next;
} edge[N*];
int n,x,from[N],to[N],head[N],num_edge,used[N],now,a[]; void add(int u,int v)
{
edge[++num_edge].to=v;
edge[num_edge].next=head[u];
head[u]=num_edge;
} bool check(int x,int y,int ans)
{
if (y< || y>=n) return false;
if (min(abs(x-y),n-abs(x-y))==ans) return true;
return false;
} bool find(int x)
{
for (int i=head[x];i!=;i=edge[i].next)
if (used[edge[i].to]!=now)
{
used[edge[i].to]=now;
if (!to[edge[i].to] || find(to[edge[i].to]))
{
to[edge[i].to]=x;
from[x]=edge[i].to;
return true;
}
}
return false;
} int main()
{
memset(used,0x7f,sizeof(used));
scanf("%d",&n);
for (int i=;i<=n-;++i)
{
scanf("%d",&x);
a[]=i+x,a[]=i-x,a[]=i+(n-x),a[]=i-(n-x);
sort(a+,a++);
if (check(i,a[],x))
add(i,a[]);
if (check(i,a[],x))
add(i,a[]);
if (check(i,a[],x))
add(i,a[]);
if (check(i,a[],x))
add(i,a[]); } int ans=;
for (int i=n-;i>=;--i)
{
now=i;
if (find(i)) ans++;
else break;
}
if (ans!=n)
printf("No Answer");
else
{
for (int i=;i<=n-;++i)
printf("%d ",from[i]);
printf("%d",from[n-]);
}
}

1562. [NOI2009]变换序列【二分图】的更多相关文章

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

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

  2. BZOJ 1562 [NOI2009] 变换序列

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

  3. Luogu P1963 [NOI2009]变换序列(二分图匹配)

    P1963 [NOI2009]变换序列 题意 题目描述 对于\(N\)个整数\(0,1, \cdots ,N-1\),一个变换序列\(T\)可以将\(i\)变成\(T_i\),其中\(T_i \in ...

  4. 【BZOJ1562】【jzyzOJ1730】【COGS409】NOI2009变换序列 二分图匹配

    [问题描述]        对于N个整数0, 1, ……, N-1,一个变换序列T可以将i变成Ti,其中 定义x和y之间的距离.给定每个i和Ti之间的距离D(i,Ti), 你需要求出一个满足要求的变换 ...

  5. BZOJ 1562 [NOI2009]变换序列:二分图匹配

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 题意: 给定n,定义D(x,y) =  min(|x-y|, n-|x-y|),然后 ...

  6. BZOJ1562: [NOI2009]变换序列(二分图 匈牙利)

    Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50:60%的数据中N≤ ...

  7. 1562: [NOI2009]变换序列 - BZOJ

    Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50:60%的数据中N≤ ...

  8. [Luogu 1963] NOI2009 变换序列

    [Luogu 1963] NOI2009 变换序列 先%Dalao's Blog 什么?二分图匹配?这个确定可以建图? 「没有建不成图的图论题,只有你想不出的建模方法.」 建图相当玄学,不过理解大约也 ...

  9. noi2009变换序列

    noi2009变换序列 一.题目 1843 变换序列 2009年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解       题目描述  ...

随机推荐

  1. dynamic结合匿名类型 匿名对象传参

    首先说明下,我一般很少用dynamic关键字(类)的,因为毕竟是由反射实现的,所以对于性能方面还是吃亏不少(注:由于心里没底,查了一些资料得知,dynamic实质上好像不是由反射实现的,其性能也比直接 ...

  2. EnyimMemcached(64位)使用实例

    1.安装:http://www.cnblogs.com/dudu/archive/2009/07/19/1526669.html 2.使用 using Enyim.Caching.Configurat ...

  3. Codeforces 981H:K Paths

    传送门 考虑枚举一条路径 \(u,v\),求出所有边经过它的答案 只需要求出 \(u\) 的子树内选出 \(k\) 个可以重复的点,使得它们到 \(u\) 的路径不相交 不难发现,就是从 \(u\) ...

  4. display none隐藏后如果表单有数值,那么他的数值还存在!

    以前以为display:none后他的值就不存在了, display:none隐藏后如果表单有数值,那么他的数值还存在.(项目出了问题!!) <!DOCTYPE html PUBLIC &quo ...

  5. animation 秒简单笔记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. CSS属性display的浅略探讨

    display 的属性值有:none|inline|block|inline-block|list-item|run-in|table|inline-table|table-row-group|tab ...

  7. 自己编写jQuery插件 之 无缝滚动

    一. 效果图 二. Html骨架结构 <div class="box"> <ul> <li>1</li> <li>2&l ...

  8. js原生实现轮播

    前两天同事面试新人,让现场写”轮播的实现”.我一想这玩意貌似我也没写过啊,就在旁边暗搓搓地拖了一张纸也在那写,同事都纳闷了! 这玩意实现方法有很多种,就看喜欢那种,喜欢怎么写而已.我这里是通过对img ...

  9. Python这个缩进让我焦头烂额!最奇葩的缩进...

        例如如下程序.     运行上面代码,如果输入年龄小于20,将会看到如下运行结果.     从上面代码可以看出,如果输入的年龄大于20,则程序会执行整体缩进的代码块. 再次重复:Python不 ...

  10. java基础(三) 加强型for循环与Iterator

    引言   从JDK1.5起,增加了加强型的for循环语法,也被称为 "for-Each 循环".加强型循环在操作数组与集合方面增加了很大的方便性.那么,加强型for循环是怎么解析的 ...