首页 技术 正文
技术 2022年11月21日
0 收藏 792 点赞 4,938 浏览 1905 个字

原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1211

调了挺久的,自己的一份舞蹈链模板……

算是在网上见到的模板中比较短的一份吧(2.2K)

#include<cstdio>
#include<algorithm>
#include<ctime>
#define MN 300000
using namespace std;
int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
int n,m,l[MN],r[MN],d[MN],u[MN],X[MN],Y[MN],Z[MN],mmh[MN],st[MN],_MMH,_mmh[MN],_h[MN],map[][],_a[MN],top=,c,Num,_L[MN],s[MN],MMH=,NN=,a,num=,h=;
bool Bo[MN];
inline void rec(){int x=st[top--];d[u[x]]=x;u[d[x]]=x;l[r[x]]=x;r[l[x]]=x;s[_L[x]]++;}
inline void del(int x){if (Bo[_L[x]]) return;s[_L[x]]--;st[++top]=x;d[u[x]]=d[x];u[d[x]]=u[x];l[r[x]]=l[x];r[l[x]]=r[x];}
inline void tadd(int l,int x){u[d[u[l]]=x]=u[l];d[u[l]=x]=l;_L[x]=l;s[l]++;}
inline void hadd(int x,int y,int z){
h++;X[h]=x;Y[h]=y;Z[h]=z;
tadd(x*-+y,++num);tadd(x*-+z+,++num);tadd(y*-+z+,++num);tadd(((x-)/*+(y+)/)*-+z+,++num);
r[num-]=num-;r[num-]=num-;r[num-]=num;r[num]=num-;
l[num-]=num;l[num-]=num-;l[num-]=num-;l[num]=num-;
_h[num-]=_h[num-]=_h[num-]=_h[num]=h;
}
void work(int p){
NN++;
register int i,j,k,o;
if (MMH==) return;
if (!r[]){
_MMH=p-;
for (i=;i<=_MMH;i++) _mmh[i]=mmh[i];
MMH++;
return;
}
int bo=top,t,mr=1e9;c=;
for (i=r[];i;i=r[i]){
if (d[i]==i) return;
if (mr>s[i]){
mr=s[i];
t=i;
}
}
for (i=d[t];i!=t;i=d[i]){
mmh[p]=_h[i];
for (j=i;;j=r[j]){
for (k=j;;k=d[k]){
for (o=k;;o=r[o]){
if (Bo[o]) break;
Bo[_a[++c]=o]=;
if (r[o]==k||o<=) break;
}
if (d[k]==j) break;
}
if (r[j]==i) break;
}
for (j=c;j;j--) del(_a[j]);
while (c) Bo[_a[c--]]=;
work(p+);
while (top>bo) rec();
}
}
int main(){
register int i,j,k;
for (i=;i<=num;i++) l[i]=i==?num:i-,r[i]=i==num?:i+,u[i]=d[i]=i;
for (i=;i<=;i++)
for (j=;j<=;j++){
a=read();
if (a) hadd(i,j,a);else
for (k=;k<=;k++) hadd(i,j,k);
}
work();
if (MMH!=) return printf("No Solution\n"),;
for (i=;i<=_MMH;i++) map[X[_mmh[i]]][Y[_mmh[i]]]=Z[_mmh[i]];
for (i=;i<=;printf("\n"),i++)
for (j=;j<=;j++) printf("%d ",map[i][j]);
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,893