spoj2142 Arranging Flowers
传送门
题目大意
给你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相关推荐
- excel更改日期格式无效_Excel日期不会更改格式
excel更改日期格式无效 Have you ever imported data into Excel, from your credit card statement, or somewhere ...
- excel 日期选择器_Excel日期选择器工具
excel 日期选择器 If you'd like a quick and easy way to add dates in a worksheet, you can use this handy d ...
- python图像人类检测_OpenCV人类行为识别(3D卷积神经网络)
1. 3D卷积神经网络 相比于2D 卷积神经网络,3D卷积神经网络更能很好的利用视频中的时序信息.因此,其主要应用视频.行为识别等领域居多.3D卷积神经网络是将时间维度看成了第三维. 人类行为识别的实 ...
- 我的AI之路(55)--如何获取kinetics数据集和如何制作自己的kinetics数据集
近来做行为动作识别,根据近两年的CVPR.ICCV.ECCV论文实验了一序列的动作识别方面的模型,很多都用到了kinetics数据集或者something-something数据集,但是后者的官网目前 ...
- 【数据集】Kinetics-600 dataset介绍
最近在做行为识别,然后介绍一下目前种类多且数据量很大的行为数据集 Kinetics-600 dataset. 参考链接: activityNet:http://activity-net.org/cha ...
- 行为识别数据集 Kinetics
文章目录 0. 前言 1. 数据集介绍 附录-分类目录 Kinetics-400 分类 Kinetics-600 分类 Kinetics-700 分类 0. 前言 行为识别中重要的benchmark, ...
- Kinetics400/600/700数据集免费下载
1.简介 一组大规模.高质量的URL链接数据集,包含多达65万个视频片段,涵盖400/600/700个人类动作类别,具体取决于数据集版本.这些视频包括人与物的互动,如演奏乐器,以及人与人之间的互动,如 ...
- Kinetics-400数据集简介及下载
1.Kinetics-400数据集简介 Kinetics-400是一个大规模,高质量的YouTube视频网址数据集,其中包含各种以人为本的行动.该数据集包含 400 个人类动作类,每个动作至少有 40 ...
- OpenCV人类行为识别(3D卷积神经网络)
上图视频测试链接:https://www.bilibili.com/video/BV13E411c7Mv/ 1. 3D卷积神经网络 相比于2D 卷积神经网络,3D卷积神经网络更能很好的利用视频中的时序 ...
最新文章
- angular1配合gulp和bower使用
- Linux的pcel问题-bash: pecl: command not found
- SAP Fiori Elements - bindComponent - binding property in XML view will trigger odata request
- atoll找不到标识符c语言,C/C++编程笔记:C++中的atol,atoll和atof函数
- windows进入mysql
- 骨髓基质在正常和白血病个体中的细胞图谱|Cell最新(文末有彩蛋)
- sql 查询数据库索引重建_SQL查询性能的杀手– –了解不良的数据库索引
- [转载] Python字符串常用操作命令
- 原地踏步 – 没有突破高效理念的结果
- sshd启动报错解决:Missing privilege separation directory: /run/sshd
- git提交时”warning: LF will be replaced by CRLF“提示
- 中信证券java面试_中信证券面试问题分享
- VMware虚拟机上共享主机网络的设置方法
- 宏基5750G 不能用内置无线网卡上网
- 好玩的ios APP动动手指,轻松挣美金~~
- 跨国企业如何更好地从云革命中获益?
- 常用单片机模块(四)
- 微信小程序源代码_下厨房菜谱APP
- 学计算机颈椎痛,近九成电脑族曾颈椎疼痛,怎么办?
- 专业导师告诉你,有哪些51单片机教程值得大力推荐
热门文章
- winform使用CefSharp嵌入浏览器
- C#WinForm 分屏教程合集
- iOS动画专题·UIView二维形变动画与CAAnimation核心动画
- when I want to have a rest
- mysql 数据库切分_mysql数据库切分
- 如何1秒内快速判断一个函数的凹凸性?还看不懂我给你赔钱
- 基于PHP服装购物网站的设计与实现
- 《上海市居住证》积分申请的个人书面材料
- 【生产调度】基于Harmony Search (HSPMS) 和 Shuffled Complex Evolution (SCEPMS) 实现并行机器调度附matlab代码
- 服务器u盘安装linux6.7,U盘如何安装centos7系统?U盘安装centos7详细安装图解教程...