【二分图匹配】BZOJ1562-[NOI2009] 变换序列
【题目大意】
对于0,1,…,N-1的N个整数,给定一个距离序列D0,D1,…,DN-1,定义一个变换序列T0,T1,…,TN-1使得每个i,Ti的环上距离等于Di。一个合法的变换序列应是0,1,…,N-1的一个排列,任务是要求出字典序最小的那个变换序列。(概括by:BYVoid)
【思路】
我们意识流现象一下。平时二分图匹配我们会根据从前往后,后面的会占用前方匹配,使得前方节点需要重新匹配。所以得出结论——后面的点会连到比较小的。那么我们就可以yy出这样一个做法:把每一个点连的边从小到大排序,从后往前进行匈牙利算法。
一个剪枝:有一些节点存在唯一的匹配,可以直接预处理好这些匹配唯一的点,余下的点再跑匈牙利算法。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int MAXN=+;
vector<int> E[MAXN],rE[MAXN];
int n,in[MAXN],visfr[MAXN],visto[MAXN],vis[MAXN],lk[MAXN],ans[MAXN],cnt=; void addedge(int u,int v)
{
E[u].push_back(v);
rE[v].push_back(u);
} int find(int u)
{
for (int j=;j<E[u].size();j++)
{
int i=E[u][j];
if (!vis[i] && !visto[i])
{
vis[i]=;
if (!lk[i] || find(lk[i]))
{
lk[i]=u;
ans[u]=i;
return ;
}
}
}
return ;
} void init()
{
memset(visfr,,sizeof(visfr));
memset(visto,,sizeof(visto));
memset(in,,sizeof(in));
memset(lk,,sizeof(lk));
scanf("%d",&n);
for (int i=;i<=n;i++)
{
int d;
scanf("%d",&d);
int a=i+d;if (a>n) a-=n;
int b=i-d;if (b<) b+=n;
if (a<b) addedge(i,a),addedge(i,b);
else if (a>b) addedge(i,b),addedge(i,a);
else if (a==b)
{
visfr[i]=visto[a]=;
ans[i]=a;
cnt++;
}
if (a!=b) in[a]++,in[b]++;else in[a]++;
}
for (int i=;i<=n;i++)
if (in[i]== && !visto[i])
{
visto[i]=visfr[rE[i][]]=;
ans[rE[i][]]=i;
cnt++;
}
} void solve()
{
for (int i=n;i>=;i--)
{
if (visfr[i]) continue;
memset(vis,,sizeof(vis));
if (find(i)) cnt++;else break;
}
if (cnt==n)
{
for (int i=;i<=n;i++)
{
printf("%d",(ans[i]+n-)%n);
if (i!=n) printf(" ");
}
}
else puts("No Answer");
} int main()
{
freopen("transform.in","r",stdin);
freopen("transform.out","w",stdout);
init();
solve();
return ;
}
【二分图匹配】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. 题解 每个位置可 ...
- 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≤ ...
- Bzoj 1562: [NOI2009]变换序列 匈牙利算法,二分图匹配
题目: http://cojs.tk/cogs/problem/problem.php?pid=409 409. [NOI2009]变换序列 ★★☆ 输入文件:transform.in 输出文 ...
- Luogu P1963 [NOI2009]变换序列(二分图匹配)
P1963 [NOI2009]变换序列 题意 题目描述 对于\(N\)个整数\(0,1, \cdots ,N-1\),一个变换序列\(T\)可以将\(i\)变成\(T_i\),其中\(T_i \in ...
- BZOJ 1562 [NOI2009] 变换序列
[NOI2009] 变换序列 [题解] 就是有一个序列,每个位置可以填两个数,不可重复,问最小字典序. 显然,可以建一个二分图,判合法就是找完美匹配. 那怎么弄最小字典序呢?有好多种解法,我这里给出了 ...
- [Luogu 1963] NOI2009 变换序列
[Luogu 1963] NOI2009 变换序列 先%Dalao's Blog 什么?二分图匹配?这个确定可以建图? 「没有建不成图的图论题,只有你想不出的建模方法.」 建图相当玄学,不过理解大约也 ...
随机推荐
- TDD随想录
TDD随想录 谨以本文献给TDD的开创者与传播者 本文纯属个人经历,如有雷同纯属巧合 我从不觉得自己是一个好的程序员,甚至可能连合格都谈不上,不过在内心深处我却渴望着在编程这件事上获得成功. 可惜每次 ...
- js_一个简单的30分钟循环倒计时
吐槽段: 需求的变更是千变万化的,至少在你说服和你打交道的那位谁谁谁之前. 创业公司就是这样,产品经理一个想法,就是改改改,管你改起来复杂不复杂,在他们眼里都是非常简单的. 今天的一个小改动需求,把活 ...
- 64_l3
libguac-client-ssh-0.9.13-3.20170521git6d2cfda...> 23-May-2017 09:58 64570 libguac-client-ssh-0.9 ...
- MVC自定义路由实现URL重写,SEO优化
//App_Start-RouteConfig.cs public class RouteConfig { public static void RegisterRoutes(RouteCollect ...
- 对list对象进行排序
List<LjlSevOrdersVO> list = ljlSevOrdersService.findSevForOrders(ljlSevOrdersVO); //查出所有是自愿者的订 ...
- python--tesseract
tesseract的介绍 我们爬虫会受到阻碍,其中一个便是我们在模拟登陆或者请求一些数据的时候,出现的图形验证码,因此我们需要一种能叫图形验证码识别成文本的技术.将图片翻译成文字一般称为光学文字识别( ...
- CF868F Yet Another Minimization Problem
题目描述: 给定一个序列,要把它分成k个子序列.每个子序列的费用是其中相同元素的对数.求所有子序列的费用之和的最小值. 输入格式:第一行输入n(序列长度)和k(需分子序列段数).下一行有n个数,序列的 ...
- io流中比较特殊的流-java
1.序列流(SequenceInputStream)整合个多个文件 A SequenceInputStream表示其他输入流的逻辑级联. 它从一个有序的输入流集合开始,从第一个读取到文件的结尾,然后从 ...
- 9:django 表单
django自带表单系统,这个表单系统不仅可以定义属性名,还可以自己定义验证,更有自己自带的错误提示系统 这节我们仅仅粗略的来看一下django表单系统的入门运用(具体的实在太多东西,主要是我觉得有很 ...
- 机器学习方法(四):决策树Decision Tree原理与实现技巧
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面三篇写了线性回归,lass ...