bzoj1562[NOI2009] 变换序列
题目链接: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] 变换序列相关推荐
- bzoj1562 [NOI2009]变换序列
bzoj1562 [NOI2009]变换序列 NOI也有SB题系列. 一个\(i\)只有两种可能的\(T_i\) 要求所有\(T_i\)不重复,且字典序坠小. 仔细想一想匈牙利匹配的过程就可以知道:要 ...
- 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 ...
- P1963 [NOI2009]变换序列
题目描述 不想水字,详见某谷:P1963 [NOI2009]变换序列 solution 其实 的计算就类似于环上的距离. 对于每一个 都可能有两种位置选择:, . 所以把它们分别连边,二分图上 ...
- [NOI2009] 变换序列 (匈牙利最大匹配)
description - solution 我竟然一眼题!! 变换后的TTT数组是[0,n)[0,n)[0,n)的排列,变换规则也有,距离DDD也知道 很明显可以求出iii的可能变换对象 这不就是个 ...
- 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 ...
- bzoj 1562 [NOI2009]变换序列 二分图
题面 题目传送门 解法 显然可以构建一个二分图模型 但是要求出字典序最小的解,那么网络流就无能为力了 考虑用匈牙利算法来跑 匈牙利算法就是用大的来代替小的,那我们把连接的点从小到大排序,然后从左边大的 ...
- 【二分图匹配】BZOJ1562-[NOI2009] 变换序列
[题目大意] 对于0,1,-,N-1的N个整数,给定一个距离序列D0,D1,-,DN-1,定义一个变换序列T0,T1,-,TN-1使得每个i,Ti的环上距离等于Di.一个合法的变换序列应是0,1,-, ...
- BZOJ 1562 变换序列
二分图匹配 要求字典序最小 匈牙利算法 自N-1至0尝试匹配 先尝试小数,这个通过加边顺序控制 这样高优先权位置只有在不可行时才取大数 #include <iostream>using n ...
最新文章
- 微信拦截URL,使用自己内置的web组件打开URL,为什么没人声讨?
- HDU5709 : Claris Loves Painting
- 《精益软件度量——实践者的观察与思考》—第1章1.1节精益软件开发的度量体系...
- lunixs 退出mysql_MySQL的基本操作
- VC程序中运行其他程序的三种方法
- 猎豹浏览器禁止跟踪怎么开启 禁止跟踪功能开启方法
- 软件集成策略故事连载----构建错误是怎么来的
- 机房黑科技:京东数科机房巡检机器人
- NOI题库练习1.4(08)
- 能源数字化,未来四十年看什么?
- 微软的MSR paraphrase数据集
- 从零学习游戏服务器开发(一) 从一款多人联机实时对战游戏开始
- Router-Link详解
- [ Tensorflow学习之路 ] —— API:TF-Slim
- 机械手组装调试系列教程(一)——开题篇
- 如何构建公司级的数据指标体系
- 苹果浏览器实战(三)
- acwing算法基础课数学知识关于质数的笔记
- ORA-12541: TNS:no listener 解决办法
- [长城杯 2022]办公室爱情
热门文章
- CentOS8安装nginx详细教程
- RedisTemplate存数据时指定过期时间
- Android开发笔记(一百七十一)使用Glide加载网络图片
- Android开发笔记(三十九)Activity的生命周期
- 死链提交为什么不能提交 html文件,百度提交网站后死链一直未处理掉的原因有哪些?...
- linux查看共享内存max,浅析Linux的共享内存与tmpfs文件系统
- java字符串元素置于最前_java_java编程常用技术(推荐),一:将String字符串放在最前面 - phpStudy...
- 苹果推出新款iPad Air和iPad mini,升级A12处理器
- SQL Server监控全解析
- iOS开发笔记系列-基础3(多态、动态类型和动态绑定)