[BZOJ1562][NOI2009] 变换序列
Description

Input

Output

Sample Input
1 1 2 2 1
Sample Output
HINT
30%的数据中N≤50;
60%的数据中N≤500;
100%的数据中N≤10000。
题解:
二分图匹配模型很显然,但是不要看到二分图就去网络流了。。。注意到题目要求的是字典序最小的!如果你用Dinic算法去多路增广,根本无法保证字典序,除非用EK。据说也有边增广边调整的搞法,但是这么多花式搞法,前提都是你不知道匈牙利算法!匈牙利算法是一种非常简单的单路增广算法,不详解了。
这道题的重点在于你知道二分图匹配这个大专题之后怎么去求解。要求是字典序最小的解,这个很好解决。每次在插入边的时候,将字典序较大的边优先加入即可,每次优先匹配字典序较小的(因为后加入的先匹配)。
代码:
--------------------------------------------------------------------------------------------------
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
#define MAXN 20005
#define INF 0x3f3f3f3f
struct Edge { int v, next; } edge[MAXN];
int n, d, num[MAXN], ans[MAXN], vis[MAXN], now, h[MAXN];
void addEdge(int u, int v) { now++, edge[now] = (Edge) {v, h[u]}, h[u] = now; }
int DFS(int o)
{
for (int x = h[o]; x != -1; x = edge[x].next)
{
int v = edge[x].v;
if (!vis[v])
{
vis[v] = 1;
if (num[v] == -1 || DFS(num[v]))
{
ans[o] = v, num[v] = o;
return 1;
}
}
}
return 0;
}
void work()
{
int tot = 0;
for (int i = n - 1; i >= 0; i--)
{
memset(vis, 0, sizeof(vis));
if (DFS(i)) tot++; else break;
}
if (tot != n) printf("No Answer\n");
else for (int i = 0; i < n; i++) printf("%d ", ans[i]);
}
int x;
int main()
{
freopen("transform.in", "r", stdin);
freopen("transform.out", "w", stdout);
memset(ans, -1, sizeof(ans)), memset(num, -1, sizeof(num)), memset(h, -1, sizeof(h));
scanf("%d", &n);
for (int i = 0; i <= n - 1; i++)
{
scanf("%d", &x);
int v1 = i + x >= n ? (i + x) % n : i + x;
int v2 = i - x < 0 ? i - x + n : i - x;
if (v1 < v2) swap(v1,v2);
addEdge(i, v1), addEdge(i, v2);
}
work();
return 0;
}
--------------------------------------------------------------------------------------------------
[BZOJ1562][NOI2009] 变换序列的更多相关文章
- bzoj1562[NOI2009]变换序列——2016——3——12
任意门:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 题目: 对于0,1,…,N-1的N个整数,给定一个距离序列D0,D1,…,DN-1,定 ...
- 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≤ ...
- BZOJ1562——[NOI2009]变换序列
1.题意:题意有些难理解 2.分析:我们发现如果要求判断是否合法的话就so easy了,二分图匹配即可,但是我们发现要求输出字典序最小的,那么我们在匈牙利的时候就倒着枚举,另外邻接表中的边一定要排好序 ...
- BZOJ1562 [NOI2009]变换序列 【KM算法】
题目 输入格式 输出格式 输入样例 5 1 1 2 2 1 输出样例 1 2 4 0 3 提示 30%的数据中N≤50: 60%的数据中N≤500: 100%的数据中N≤10000. 题解 每个位置可 ...
- Bzoj 1562: [NOI2009]变换序列 匈牙利算法,二分图匹配
题目: http://cojs.tk/cogs/problem/problem.php?pid=409 409. [NOI2009]变换序列 ★★☆ 输入文件:transform.in 输出文 ...
- BZOJ 1562 [NOI2009] 变换序列
[NOI2009] 变换序列 [题解] 就是有一个序列,每个位置可以填两个数,不可重复,问最小字典序. 显然,可以建一个二分图,判合法就是找完美匹配. 那怎么弄最小字典序呢?有好多种解法,我这里给出了 ...
- [Luogu 1963] NOI2009 变换序列
[Luogu 1963] NOI2009 变换序列 先%Dalao's Blog 什么?二分图匹配?这个确定可以建图? 「没有建不成图的图论题,只有你想不出的建模方法.」 建图相当玄学,不过理解大约也 ...
- noi2009变换序列
noi2009变换序列 一.题目 1843 变换序列 2009年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 ...
- Luogu P1963 [NOI2009]变换序列(二分图匹配)
P1963 [NOI2009]变换序列 题意 题目描述 对于\(N\)个整数\(0,1, \cdots ,N-1\),一个变换序列\(T\)可以将\(i\)变成\(T_i\),其中\(T_i \in ...
随机推荐
- Linux时间同步
(1)进入 root权限 su root(2)使用ntpdate IP(时间源IP)或service crond restart查看服务有没有开启(3)#crontab -e(新增一下语句) 0 */ ...
- flex实验总结
1.父元素 .box{ display:flex; flex-direction: column;//铺满垂直排列 flex-direction: column-reverse;//铺满垂直反向排列 ...
- MVC中使用Entity Framework 基于方法的查询学习笔记 (三)
紧接上文,我们已经学习了MVC数据上下文中两个常用的类,这两个类承载着利用函数方式进行数据查询的全部内容,我们既然已经了解了DbSet<TEntity> 是一个泛型集合,并且实现了一些接口 ...
- [转] 有java基础的人如何转行做大数据?
数据有两个方向,一个是偏计算机的,另一个是偏经济的.你学过Java,所以你可以偏将计算机基础1. 读书<Introduction to Data Mining>,这本书很浅显易懂,没有复杂 ...
- iOS9 中的On-Demand Resources,编辑中。。。
最近要写一个包含许多Html内容的应用,就想能不能通过ios9的这个新特性,缩小一下app的体积,也看看这个新特性和最常使用的用服务器下载资源包有什么不同. 先看官方文档: http://www.co ...
- C# 连接DB2字符串 Oracle免安装客户端连接字符串
以下是DB2连接数据库 1)使用IBM.Data.DB2链接DB2数据库 2)必须安装DB2客户端,IBM.Data.DB2在安装的BIN里可以找到 3)注意一下DB2客户端版本问题,我的就是WIN7 ...
- VC++ GetModuleFileName()获取路径字符串中带波浪线~
GetModuleFileName()获取的字符串中带波浪线,不是完整的路径显示. 原因:获取的是短路径,进行了缩写 解决:还原长路径 TCHAR }; GetLongPathName( strTem ...
- html+css上传文件控件美化
html上传美化: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- django一些操作命令
1.数据库与class类同步命令 syncdb command is deprecated in django 1.7. Use the python manage.py migrate instea ...
- Power BI for Office 365 概览
伴随着数据量的日益增长,通过自服务式的商业智能把数据转换成辅助决策支持的工具,越来越成为迫切的需求.在以前,处理这些数据往往只是IT人员范围内的事,但是通过Power BI for Office 36 ...