原题链接: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]);
}

51 nod 1211 数独 DLX的更多相关文章

  1. 51 nod 1439 互质对(Moblus容斥)

    1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 有n个数字,a[1],a[2],…,a[n].有一个集合,刚开 ...

  2. 51 nod 1495 中国好区间

    1495 中国好区间 基准时间限制:0.7 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是& ...

  3. 51 nod 1427 文明 (并查集 + 树的直径)

    1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题   安德鲁在玩一个叫“文明”的游戏.大妈正在帮助他. 这个游 ...

  4. 51 nod 1055 最长等差数列(dp)

    1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 5 6 8 9 ...

  5. 51 nod 1421 最大MOD值

    1421 最大MOD值 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以 ...

  6. 51 nod 1681 公共祖先 (主席树+dfs序)

    1681 公共祖先 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   有一个庞大的家族,共n人.已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边). 在另 ...

  7. 51 nod 1766 树上的最远点对(线段树+lca)

    1766 树上的最远点对 基准时间限制:3 秒 空间限制:524288 KB 分值: 80 难度:5级算法题   n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个 ...

  8. 51 nod 1405 树的距离之和

    1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题   给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之 ...

  9. 51 nod 1610 路径计数(Moblus+dp)

    1610 路径计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   路径上所有边权的最大公约数定义为一条路径的值. 给定一个有向无环图.T次修改操作,每次修改一 ...

随机推荐

  1. 【CSS3】内联、内部、外部样式,样式优先级、层叠、继承

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. iOS 实现UIImageView 的不停的旋转(更新:2017.7.26)

    1.先创建一个UIImageView. - (void)createImageView { UIImageView *imageView = [[UIImageView alloc] initWith ...

  3. 【ASP.NET系列】详解Views

    描述 本片文章内容属于ASP.NET MVC系列视图篇,主要讲解View,大致内容如下: 1.Views文件夹讲解 2.View种类 3.Razor语法 4.对视图的基本操作 一   Views文件夹 ...

  4. DNS查询相关

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/45 一种简单的设计方式是在因特网上使用一个DNS服务器,该服务器 ...

  5. 637. Average of Levels in Binary Tree

    Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...

  6. Thinkphp开启调试模式

    3.0版本的调试模式开启,必须在项目入口文件中添加常量APP_DEBUG定义,如下: define('APP_DEBUG',True); // 开启调试模式 开启调试模式后,你可能感觉不到什么变化,不 ...

  7. bat常用命令

    1.@它的作用是隐藏它后面这一行的命令本身(只能影响当前行).2.echo中文为"反馈"."回显"的意思.它其实是一个开关命令,就是说它只有两种状态:打开和关闭 ...

  8. Notepad++使用教程

    Notepad++ 快捷键 大全 Ctrl+C 复制Ctrl+X 剪切Ctrl+V 粘贴Ctrl+Z 撤消Ctrl+Y 恢复Ctrl+A 全选Ctrl+F 键查找对话框启动Ctrl+H 查找/替换对话 ...

  9. Keras:基于Theano和TensorFlow的深度学习库

    catalogue . 引言 . 一些基本概念 . Sequential模型 . 泛型模型 . 常用层 . 卷积层 . 池化层 . 递归层Recurrent . 嵌入层 Embedding 1. 引言 ...

  10. 自己做一台3D打印机到底有多难?(附教程)

    •    微博: 小样儿老师2015 初识 3D打印技术,即快速成形技术,它是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术,3D打印机则出现在上世纪9 ...