1562. [NOI2009]变换序列【二分图】
Description
Input
Output
Sample Input
1 1 2 2 1
Sample Output
HINT
30%的数据中N≤50;
60%的数据中N≤500;
100%的数据中N≤10000。
匈牙利裸题
因为要注意字典序
所以加边还有find的时候要注意一下先后顺序
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 #define N (10000+100) 7 using namespace std; 8 struct node 9 { 10 int to,next; 11 } edge[N*4]; 12 int n,x,from[N],to[N],head[N],num_edge,used[N],now,a[10]; 13 14 void add(int u,int v) 15 { 16 edge[++num_edge].to=v; 17 edge[num_edge].next=head[u]; 18 head[u]=num_edge; 19 } 20 21 bool check(int x,int y,int ans) 22 { 23 if (y<0 || y>=n) return false; 24 if (min(abs(x-y),n-abs(x-y))==ans) return true; 25 return false; 26 } 27 28 bool find(int x) 29 { 30 for (int i=head[x];i!=0;i=edge[i].next) 31 if (used[edge[i].to]!=now) 32 { 33 used[edge[i].to]=now; 34 if (!to[edge[i].to] || find(to[edge[i].to])) 35 { 36 to[edge[i].to]=x; 37 from[x]=edge[i].to; 38 return true; 39 } 40 } 41 return false; 42 } 43 44 int main() 45 { 46 memset(used,0x7f,sizeof(used)); 47 scanf("%d",&n); 48 for (int i=0;i<=n-1;++i) 49 { 50 scanf("%d",&x); 51 a[1]=i+x,a[2]=i-x,a[3]=i+(n-x),a[4]=i-(n-x); 52 sort(a+1,a+4+1); 53 if (check(i,a[4],x)) 54 add(i,a[4]); 55 if (check(i,a[3],x)) 56 add(i,a[3]); 57 if (check(i,a[2],x)) 58 add(i,a[2]); 59 if (check(i,a[1],x)) 60 add(i,a[1]); 61 62 } 63 64 int ans=0; 65 for (int i=n-1;i>=0;--i) 66 { 67 now=i; 68 if (find(i)) ans++; 69 else break; 70 } 71 if (ans!=n) 72 printf("No Answer"); 73 else 74 { 75 for (int i=0;i<=n-2;++i) 76 printf("%d ",from[i]); 77 printf("%d",from[n-1]); 78 } 79 }
转载于:https://www.cnblogs.com/refun/p/8680855.html
1562. [NOI2009]变换序列【二分图】相关推荐
- bzoj 1562 [NOI2009]变换序列 二分图
题面 题目传送门 解法 显然可以构建一个二分图模型 但是要求出字典序最小的解,那么网络流就无能为力了 考虑用匈牙利算法来跑 匈牙利算法就是用大的来代替小的,那我们把连接的点从小到大排序,然后从左边大的 ...
- 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 其实 的计算就类似于环上的距离. 对于每一个 都可能有两种位置选择:, . 所以把它们分别连边,二分图上 ...
- 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] 变换序列
题目链接:bzoj1562 题目大意: 给出一个序列(0~n-1),这个序列经过某个变换会成为另外一个序列,但是其中的元素不会改变,给出初始序列与变换后的序列每一位上的"距离",求 ...
- [NOI2009] 变换序列 (匈牙利最大匹配)
description - solution 我竟然一眼题!! 变换后的TTT数组是[0,n)[0,n)[0,n)的排列,变换规则也有,距离DDD也知道 很明显可以求出iii的可能变换对象 这不就是个 ...
- 【二分图匹配】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 ...
最新文章
- ubuntu安装mysql远程_Ubuntu18.04下远程安装MySQL
- python发送短信接口_python发送短信和发送邮件
- dhcp怎么开启 linux,怎么开启DHCP服务器啊
- html淡化效果,jQuery实现基本淡入淡出效果的方法详解
- CCF 201503-2 数字排序
- 没有绝对的技术,只有不停的创新
- 令人期待的php7.4,PHP7.4新特性
- win目录挂载到linux目录遇到的小问题
- 类别不平衡学习的常用策略
- Microsoft Office Visio 2007
- 三节点潮流计算matlab,电力系统分析大作业matlab三机九节点潮流计算报告.doc
- USGS下载遥感影像——以Landsat影像下载为例
- 叒一次算法作业hhhhhhhh
- 软件分类和软件测试工作流程
- 470Ω排阻阻值测量
- (二)苏世民:我的经验和教训:追梦(12)
- 如何同步公众号内容到头条自媒体?
- 海尔消费金融2019年业绩:营收13.89亿元,净利润2.05亿元
- outlook打开总是要输入密码,怎么办?
- 微信小程序 post请求发送x-www-form-urlencoded类型数据