传送门

题目大意

给你n和m,表示一个n*n的数独已经填完了m行,让你填出剩下几行,要求答案的字典序最小。

分析

看到这道题我首先想到的是记录每行每列使用了哪些数字,然后贪心的来填,但是发现用这种策略会在有些情况下得不到解。于是我们考虑二分图匹配,将左边n个点表示每一行n个位置,右边n个点表示对应的n个数,我们一行一行的填,每填一行,便将产生的对应关系所代表的边删掉。那我们考虑如何二分图匹配可以得到字典序最小的答案,我们先进行一边常规的二分图匹配,然后枚举1到n每一个位置,找所有现在比位置j对应的值小且位置在j之后的k替换现在j对应的值,检测是否可以替换。注意这里的used数组只需每个j清空一次,因为j是一个固定的值,所以之前不行的值,随着k的改变仍然不行。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define li long long
#define pb push_back
#define mp make_pair
#define y1 y12345678909
#define rii register int
#define pii pair<int,int>
#define r(x) scanf("%d",&x)
#define ck(x) cout<<x<<endl;
#define uli unsigned long long
#define clr(x) memset(x,0,sizeof(x))
#define sp cout<<"------------------------------------------------------"<<endl
int g[222],nxt[222][222],pre[222][222],belong[222],T,used[222],n,m,back[222];
inline void del(int x,int y){if(g[x]==y)g[x]=nxt[x][y];else {nxt[x][pre[x][y]]=nxt[x][y];pre[x][nxt[x][y]]=pre[x][y];}return;
}
inline bool work(int x,int lit){for(rii i=g[x];i;i=nxt[x][i])if(used[i]!=T){used[i]=T;if(!belong[i]||(belong[i]>lit&&work(belong[i],lit))){belong[i]=x;back[x]=i;return 1;}}return 0;
}
inline void go(){for(rii i=1;i<=n;++i){T++;work(i,0);}for(rii j=1;j<=n;++j){T++;for(rii k=g[j];k;k=nxt[j][k]){if(belong[k]==j)break;if(belong[k]<j)continue;int x=belong[k],y=back[j];belong[back[j]]=0;back[belong[k]]=0;belong[k]=j;back[j]=k;if(work(x,j))break;back[x]=k;belong[k]=x;belong[y]=j;back[j]=y;}}return;
}
int main(){int i,j,k,t,x;r(t);while(t--){r(n),r(m);clr(pre),clr(nxt);for(rii i=1;i<=n;++i){g[i]=1;int now=1;for(rii j=2;j<=n;++j){nxt[i][now]=j;pre[i][j]=now;now=j;}}for(rii i=1;i<=m;++i)for(rii j=1;j<=n;++j){r(x);del(j,x);}ck(n-m);for(rii i=m+1;i<=n;++i){T=0;clr(back);clr(belong);clr(used);go();for(rii j=1;j<=n;++j)del(j,back[j]);for(rii j=1;j<=n;++j)printf("%d ",back[j]);puts("");}}return 0;
}

转载于:https://www.cnblogs.com/yzxverygood/p/9428348.html

spoj2142 Arranging Flowers相关推荐

  1. excel更改日期格式无效_Excel日期不会更改格式

    excel更改日期格式无效 Have you ever imported data into Excel, from your credit card statement, or somewhere ...

  2. excel 日期选择器_Excel日期选择器工具

    excel 日期选择器 If you'd like a quick and easy way to add dates in a worksheet, you can use this handy d ...

  3. python图像人类检测_OpenCV人类行为识别(3D卷积神经网络)

    1. 3D卷积神经网络 相比于2D 卷积神经网络,3D卷积神经网络更能很好的利用视频中的时序信息.因此,其主要应用视频.行为识别等领域居多.3D卷积神经网络是将时间维度看成了第三维. 人类行为识别的实 ...

  4. 我的AI之路(55)--如何获取kinetics数据集和如何制作自己的kinetics数据集

    近来做行为动作识别,根据近两年的CVPR.ICCV.ECCV论文实验了一序列的动作识别方面的模型,很多都用到了kinetics数据集或者something-something数据集,但是后者的官网目前 ...

  5. 【数据集】Kinetics-600 dataset介绍

    最近在做行为识别,然后介绍一下目前种类多且数据量很大的行为数据集 Kinetics-600 dataset. 参考链接: activityNet:http://activity-net.org/cha ...

  6. 行为识别数据集 Kinetics

    文章目录 0. 前言 1. 数据集介绍 附录-分类目录 Kinetics-400 分类 Kinetics-600 分类 Kinetics-700 分类 0. 前言 行为识别中重要的benchmark, ...

  7. Kinetics400/600/700数据集免费下载

    1.简介 一组大规模.高质量的URL链接数据集,包含多达65万个视频片段,涵盖400/600/700个人类动作类别,具体取决于数据集版本.这些视频包括人与物的互动,如演奏乐器,以及人与人之间的互动,如 ...

  8. Kinetics-400数据集简介及下载

    1.Kinetics-400数据集简介 Kinetics-400是一个大规模,高质量的YouTube视频网址数据集,其中包含各种以人为本的行动.该数据集包含 400 个人类动作类,每个动作至少有 40 ...

  9. OpenCV人类行为识别(3D卷积神经网络)

    上图视频测试链接:https://www.bilibili.com/video/BV13E411c7Mv/ 1. 3D卷积神经网络 相比于2D 卷积神经网络,3D卷积神经网络更能很好的利用视频中的时序 ...

最新文章

  1. angular1配合gulp和bower使用
  2. Linux的pcel问题-bash: pecl: command not found
  3. SAP Fiori Elements - bindComponent - binding property in XML view will trigger odata request
  4. atoll找不到标识符c语言,C/C++编程笔记:C++中的atol,atoll和atof函数
  5. windows进入mysql
  6. 骨髓基质在正常和白血病个体中的细胞图谱|Cell最新(文末有彩蛋)
  7. sql 查询数据库索引重建_SQL查询性能的杀手– –了解不良的数据库索引
  8. [转载] Python字符串常用操作命令
  9. 原地踏步 – 没有突破高效理念的结果
  10. sshd启动报错解决:Missing privilege separation directory: /run/sshd
  11. git提交时”warning: LF will be replaced by CRLF“提示
  12. 中信证券java面试_中信证券面试问题分享
  13. VMware虚拟机上共享主机网络的设置方法
  14. 宏基5750G 不能用内置无线网卡上网
  15. 好玩的ios APP动动手指,轻松挣美金~~
  16. 跨国企业如何更好地从云革命中获益?
  17. 常用单片机模块(四)
  18. 微信小程序源代码_下厨房菜谱APP
  19. 学计算机颈椎痛,近九成电脑族曾颈椎疼痛,怎么办?
  20. 专业导师告诉你,有哪些51单片机教程值得大力推荐

热门文章

  1. winform使用CefSharp嵌入浏览器
  2. C#WinForm 分屏教程合集
  3. iOS动画专题·UIView二维形变动画与CAAnimation核心动画
  4. when I want to have a rest
  5. mysql 数据库切分_mysql数据库切分
  6. 如何1秒内快速判断一个函数的凹凸性?还看不懂我给你赔钱
  7. 基于PHP服装购物网站的设计与实现
  8. 《上海市居住证》积分申请的个人书面材料
  9. 【生产调度】基于Harmony Search (HSPMS) 和 Shuffled Complex Evolution (SCEPMS) 实现并行机器调度附matlab代码
  10. 服务器u盘安装linux6.7,U盘如何安装centos7系统?U盘安装centos7详细安装图解教程...