原题链接: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. LeetCode #1 TwoSum

    Description Given an array of integers, return indices of the two numbers such that they add up to a ...

  2. H5之前端操作文件

    js是否能够操作文件? js在HTML5以前浏览器端是无法操作文件的,但HTML5中给a标签增加了一个download属性,只要有这个属性,点击这个链接时浏览器就不在打开链接指向的文件,而是改为下载( ...

  3. UVALive 3177 Beijing Guards

    题目大意:给定一个环,每个人要得到Needi种物品,相邻的人之间不能得到相同的,问至少需要几种. 首先把n=1特判掉. 然后在n为偶数的时候,答案就是max(Needi+Needi+1)(包括(1,n ...

  4. phpexcel导出成绩表

    效果图如下: 代码如下:代码注释不全,请大家参考phpexcel中文帮助手册 <?php require_once 'PHPExcel.php'; function bfb($n) { retu ...

  5. CGO 类型(CGO Types) 一

    CGO Types C作为一种混合编程语言已经很久了,无论那些广泛使用的包是用何种语言实现的,都导出了和C兼容的API.Go程序调用C程序,可以借助两种工具实现,一种是cgo,另一种是SWIG工具.C ...

  6. Java 并发编程:volatile的使用及其原理

    Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...

  7. Lambda 表达式,Java中应用Lambda 表达式

    一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...

  8. 【精选】Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一.介绍 各种* _by_lua,* _by_lua_block和* _by_lua_file配置指令用 ...

  9. Jenkins 学习笔记(二):很简单的发布一次

    发布思路:从 github 拉取一些文件,然后推送到 Target server 的某个目录. 准备 1. Jenkins 需要安装的插件:『 Publish over SSH 』 2. 全局配置:系 ...

  10. Mac新手使用指南:brew安装的nginx常用命令

    安装:brew install nginx/sudo brew install nginx 启动:brew services start nginx/sudo brew services start ...