Bzoj 1562: [NOI2009]变换序列 匈牙利算法,二分图匹配
题目: http://cojs.tk/cogs/problem/problem.php?pid=409
409. [NOI2009]变换序列
★★☆ 输入文件:transform.in 输出文件:transform.out 简单对比
时间限制:1 s 内存限制:128 MB
【问题描述】
.bmp)

。给定每个i和Ti之间的距离D(i,Ti),
可知)#include<bits/stdc++.h>
using namespace std;
#define MAXN 10010
int BF[MAXN],BF1[MAXN],d[MAXN],prey[MAXN],n,f[MAXN][];
//bool f[MAXN][MAXN];
bitset<MAXN> vis;
int read()
{
int s=,fh=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')fh=-;ch=getchar();}
while(ch>=''&&ch<=''){s=s*+(ch-'');ch=getchar();}
return s*fh;
}
int Xyl(int u)
{
int i,v;
for(i=;i<=;i++)
{
v=f[u][i];
if(vis[v]==)
{
vis[v]=;
if(Xyl(BF[v])==||BF[v]==)
{
BF[v]=u;
BF1[u]=v;
return ;
}
}
}
return ;
}
int main()
{
freopen("transform.in","r",stdin);
freopen("transform.out","w",stdout);
int i,ans,dd,gs;
n=read();
memset(f,false,sizeof(f));
for(i=;i<n;i++)
{
d[i]=read();dd=n-d[i];
gs=-;
if(i-d[i]>=)f[i][++gs]=i-d[i];
if(i+d[i]<=n-)f[i][++gs]=i+d[i];
if(i-dd>=)f[i][++gs]=i-dd;
if(i+dd<=n-)f[i][++gs]=i+dd;
if(f[i][]>=f[i][])swap(f[i][],f[i][]);
}
memset(BF,,sizeof(BF));ans=;
memset(prey,-,sizeof(prey));
for(i=n-;i>=;i--)
{
vis.reset();
ans+=Xyl(i);
//prey[i]=BF1[i];
}
if(ans!=n)printf("No Answer");
else
{
//for(i=0;i<n;i++)BF1[BF[i]]=i;
for(i=;i<n;i++)printf("%d ",BF1[i]);
}
fclose(stdin);
fclose(stdout);
return ;
}
Bzoj 1562: [NOI2009]变换序列 匈牙利算法,二分图匹配的更多相关文章
- BZOJ 1562 [NOI2009] 变换序列
[NOI2009] 变换序列 [题解] 就是有一个序列,每个位置可以填两个数,不可重复,问最小字典序. 显然,可以建一个二分图,判合法就是找完美匹配. 那怎么弄最小字典序呢?有好多种解法,我这里给出了 ...
- BZOJ 1562 [NOI2009]变换序列:二分图匹配
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 题意: 给定n,定义D(x,y) = min(|x-y|, n-|x-y|),然后 ...
- 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≤ ...
- 1562. [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 ...
- Luogu P1963 [NOI2009]变换序列(二分图匹配)
P1963 [NOI2009]变换序列 题意 题目描述 对于\(N\)个整数\(0,1, \cdots ,N-1\),一个变换序列\(T\)可以将\(i\)变成\(T_i\),其中\(T_i \in ...
- [模板] 匈牙利算法&&二分图最小字典序匹配
匈牙利算法 简介 匈牙利算法是一种求二分图最大匹配的算法. 时间复杂度: 邻接表/前向星: \(O(n * m)\), 邻接矩阵: \(O(n^3)\). 空间复杂度: 邻接表/前向星: \(O(n ...
- [Luogu 1963] NOI2009 变换序列
[Luogu 1963] NOI2009 变换序列 先%Dalao's Blog 什么?二分图匹配?这个确定可以建图? 「没有建不成图的图论题,只有你想不出的建模方法.」 建图相当玄学,不过理解大约也 ...
- noi2009变换序列
noi2009变换序列 一.题目 1843 变换序列 2009年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 ...
- # 匈牙利算法(二分图最大匹配)- hdu 过山车
匈牙利算法(二分图最大匹配)- hdu 过山车 Hdu 2063 二分图:图中的点可以分成两组U,V,所有边都是连接U,V中的顶点.等价定义是:含奇数条边的图. 匹配:一个匹配是一个边的集合,其中任意 ...
随机推荐
- 解决php json_encode 出现的中文转码、乱码问题
// 防止json中文转码 function jsonEncodeWithCN($data) { return preg_replace("/\\\u([0-9a-f]{4})/ie&quo ...
- (转载)delphi checklistbox用法
delphi checklistbox用法 在Delphi中checklistbox中高亮选中(不论是否Checked)能够进行操作么?删除,上下移动等等 删除:CheckListBox.Delete ...
- Python守护进程(多线程开发)
本段代码主要作用是httpsqs队列的消费端守护进程,从httpsqs中取出数据,放入mongodb #!/usr/bin/python import sys,time,json,logging im ...
- SQL常用命令浅析
表操作备注:操作之前使用“use <数据库名>”应连接某个数据库.建表命令:create table <表名> (<字段名 1> <类型 1> [,.. ...
- Apache服务器部署ASP.NET网站
资源罗列: apache如何支持asp.net 用 Apache 发布 ASP.NET 网站
- NGUI系列教程三
接下来我们再来看Progress Bar和Slider,对比参数我们可以发现,Progress Bar和slider的明显区别在于slider多一个Thumb选项,这里的Thumb就是我们拖动的时候点 ...
- spring mvc处理流程概述
大部分Java应用都是Web应用,展现层是Web应用不可忽略的重要环节.Spring为展现层提供了一个优秀的Web框架-Spring MVC.和众多其他Web框架一样,它基于MVC设计理念,此外,它采 ...
- android开发两种退出程序方式(killProcess,System.exit)
KillProcess: 在android中我们如果想要程序的进程结束可以这样写: android.os.Process.killProcess(android.os.Process.myPid()) ...
- php数组遍历 使用while循环
while() 通常和 list(),each()配合使用. $colors= array('red','blue','green','yellow'); while(list($key,$val)= ...
- Java中对List集合排序的两种方法
第一种方法,就是list中对象实现Comparable接口,代码如下: public class Person implements Comparable<Person> { privat ...