题目链接:bzoj1562

题目大意:

给出一个序列(0~n-1),这个序列经过某个变换会成为另外一个序列,但是其中的元素不会改变,给出初始序列与变换后的序列每一位上的“距离”,求字典序最小的变换序列。#cp

题解:

匈牙利求二分图的最大匹配

//居然A了QwQ好感人
就是把一个元素跟它能变幻到的连边,(为什么我感觉可以有四种orz然后大家说的是最多两条边可能是我没有仔细研究=-=)。然后跑匈牙利看看能否完美匹配就好了。
由于方案要字典序最小,所以考虑选边的顺序。让比较小的先被选到,就是大的先连。而匈牙利中从N-1开始匹配。因为越早匹配完成,后面的点如果与前面的产生冲突,那么一定是先完成匹配的点(编号更大的)的匹配点变大。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
#define maxn 10100struct node
{int x,y,next;
}a[maxn*4];int len,first[maxn];
int d[maxn],as[maxn],bf[maxn],ask[maxn],tim;
void ins(int x,int y)
{len++;a[len].x=x;a[len].y=y;a[len].next=first[x];first[x]=len;
}
bool ffind(int x)
{for (int i=first[x];i!=-1;i=a[i].next)if (ask[a[i].y]!=tim){int y=a[i].y;ask[y]=tim;if (bf[y]==-1 || ffind(bf[y])){bf[y]=x;as[x]=y;return true;}}return false;
}
int main()
{int n,i,ans;scanf("%d",&n);len=0;memset(first,-1,sizeof(first));for (i=0;i<n;i++) scanf("%d",&d[i]);for (i=0;i<n;i++){if (d[i]>n-d[i]){if (i+d[i]<n) ins(i,i+d[i]);if (i+n-d[i]<n) ins(i,i+n-d[i]);if (i>=n-d[i]) ins(i,i-n+d[i]);if (i>=d[i]) ins(i,i-d[i]);}else{if (i+n-d[i]<n) ins(i,i+n-d[i]);if (i+d[i]<n) ins(i,i+d[i]);if (i>=d[i]) ins(i,i-d[i]);if (i>=n-d[i]) ins(i,i-n+d[i]);}}ans=tim=0;memset(bf,-1,sizeof(bf));memset(ask,0,sizeof(ask));for (i=n-1;i>=0;i--){tim++;if (ffind(i)) ans++;}if (ans!=n) printf("No Answer\n");else{printf("%d",as[0]);for (i=1;i<n;i++)printf(" %d",as[i]);printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/Euryale-Rose/p/6527796.html

bzoj1562[NOI2009] 变换序列相关推荐

  1. bzoj1562 [NOI2009]变换序列

    bzoj1562 [NOI2009]变换序列 NOI也有SB题系列. 一个\(i\)只有两种可能的\(T_i\) 要求所有\(T_i\)不重复,且字典序坠小. 仔细想一想匈牙利匹配的过程就可以知道:要 ...

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

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

  3. 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 ...

  4. P1963 [NOI2009]变换序列

    题目描述 不想水字,详见某谷:P1963 [NOI2009]变换序列 solution 其实    的计算就类似于环上的距离. 对于每一个  都可能有两种位置选择:, . 所以把它们分别连边,二分图上 ...

  5. [NOI2009] 变换序列 (匈牙利最大匹配)

    description - solution 我竟然一眼题!! 变换后的TTT数组是[0,n)[0,n)[0,n)的排列,变换规则也有,距离DDD也知道 很明显可以求出iii的可能变换对象 这不就是个 ...

  6. 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 ...

  7. bzoj 1562 [NOI2009]变换序列 二分图

    题面 题目传送门 解法 显然可以构建一个二分图模型 但是要求出字典序最小的解,那么网络流就无能为力了 考虑用匈牙利算法来跑 匈牙利算法就是用大的来代替小的,那我们把连接的点从小到大排序,然后从左边大的 ...

  8. 【二分图匹配】BZOJ1562-[NOI2009] 变换序列

    [题目大意] 对于0,1,-,N-1的N个整数,给定一个距离序列D0,D1,-,DN-1,定义一个变换序列T0,T1,-,TN-1使得每个i,Ti的环上距离等于Di.一个合法的变换序列应是0,1,-, ...

  9. BZOJ 1562 变换序列

    二分图匹配 要求字典序最小 匈牙利算法 自N-1至0尝试匹配 先尝试小数,这个通过加边顺序控制 这样高优先权位置只有在不可行时才取大数 #include <iostream>using n ...

最新文章

  1. 微信拦截URL,使用自己内置的web组件打开URL,为什么没人声讨?
  2. HDU5709 : Claris Loves Painting
  3. 《精益软件度量——实践者的观察与思考》—第1章1.1节精益软件开发的度量体系...
  4. lunixs 退出mysql_MySQL的基本操作
  5. VC程序中运行其他程序的三种方法
  6. 猎豹浏览器禁止跟踪怎么开启 禁止跟踪功能开启方法
  7. 软件集成策略故事连载----构建错误是怎么来的
  8. 机房黑科技:京东数科机房巡检机器人
  9. NOI题库练习1.4(08)
  10. 能源数字化,未来四十年看什么?
  11. 微软的MSR paraphrase数据集
  12. 从零学习游戏服务器开发(一) 从一款多人联机实时对战游戏开始
  13. Router-Link详解
  14. [ Tensorflow学习之路 ] —— API:TF-Slim
  15. 机械手组装调试系列教程(一)——开题篇
  16. 如何构建公司级的数据指标体系
  17. 苹果浏览器实战(三)
  18. acwing算法基础课数学知识关于质数的笔记
  19. ORA-12541: TNS:no listener 解决办法
  20. [长城杯 2022]办公室爱情

热门文章

  1. CentOS8安装nginx详细教程
  2. RedisTemplate存数据时指定过期时间
  3. Android开发笔记(一百七十一)使用Glide加载网络图片
  4. Android开发笔记(三十九)Activity的生命周期
  5. 死链提交为什么不能提交 html文件,百度提交网站后死链一直未处理掉的原因有哪些?...
  6. linux查看共享内存max,浅析Linux的共享内存与tmpfs文件系统
  7. java字符串元素置于最前_java_java编程常用技术(推荐),一:将String字符串放在最前面 - phpStudy...
  8. 苹果推出新款iPad Air和iPad mini,升级A12处理器
  9. SQL Server监控全解析
  10. iOS开发笔记系列-基础3(多态、动态类型和动态绑定)