HUST 1017 Exact cover(舞蹈链 入门题)(模板记录)

Python库 | exact_cover-0.5.0a0.tar.gz 资源分类:Python库 所属语言:Python 资源全名:exact_cover-0.5.0a0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.youkuaiyun.com/article/details/101784059 立即下载

【题意】不解释了,就是裸的DLX模板题,先记录一下DLX的板子,看了半天总算理解了一些。

【DLX学习】参考这篇博客:点击打开链接 写得非常清楚,顺便赞一句,DLX真的是太神奇了。orz。

【AC 代码 DLX 模板】

/********************/
//Created by just_sort 2016/8/13
//All Rights Reserved.
//Dancing Links HUST 1017
/********************/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxnode = 100010;
const int maxm = 1010;
const int maxn = 1010;
struct DLX{
    int n,m,size;
    int U[maxnode],D[maxnode],L[maxnode],R[maxnode],Row[maxnode],Col[maxnode];
    //U D R L用来记录某个标号的节点的上下左右节点的编号
    //Row Col用来记录某个标号的节点在矩阵中的行号和列号
    int H[maxn],S[maxm];
    //H是行头,S用来保存某一列中1的数量
    int ansd,ans[maxn];
    void init(int _n,int _m)
    {
        n=_n,m=_m;
        //初始化列头
        for(int i=0; i<=m; i++){
            S[i]=0;
            U[i]=D[i]=i;
            L[i]=i-1,R[i]=i+1;
        }
        R[m]=0,L[0]=m;
        size=m;
        for(int i=1; i<=n; i++) H[i]=-1;
    }
    void Link(int r,int c)
    {
        ++S[Col[++size]=c];
        Row[size]=r;
        D[size]=D[c];
        U[D[c]]=size;
        U[size]=c;
        D[c]=size;
        if(H[r]<0){
            H[r]=L[size]=R[size]=size;
        }else{
            R[size]=R[H[r]];
            L[R[H[r]]]=size;
            L[size]=H[r];
            R[H[r]]=size;
        }
    }
    //对某一列进行删除,并删除列中为1的行
    void remove(int c)
    {
        L[R[c]]=L[c];R[L[c]]=R[c];
        for(int i=D[c]; i!=c; i=D[i])
        for(int j=R[i]; j!=i; j=R[j]){
            U[D[j]]=U[j];
            D[U[j]]=D[j];
            --S[Col[j]];
        }
    }
    //反着恢复状态
    void resume(int c)
    {
        for(int i=U[c]; i!=c; i=U[i])
        for(int j=L[i]; j!=i; j=L[j]){
            U[D[j]]=D[U[j]]=j;
            ++S[Col[j]];
        }
        L[R[c]]=R[L[c]]=c;
    }
    //d为递归深度
    bool dance(int d)
    {
        if(R[0]==0){
            ansd=d;
            return true;
        }
        int c=R[0];
        //一个优化 找到列中包含1最多的列 因为这样有助于减少递归深度(很显然1多了 删掉的行也多 矩阵缩小得就快)
        for(int i=R[0]; i!=0; i=R[i]){
            if(S[i]<S[c])
                c=i;
        }
        remove(c);
        //搜索
        for(int i=D[c]; i!=c; i=D[i]){
            ans[d]=Row[i];
            for(int j=R[i]; j!=i; j=R[j]) remove(Col[j]);
            if(dance(d+1)) return true;
            for(int j=L[i]; j!=i; j=L[j]) resume(Col[j]);
        }
        resume(c);
        return false;
    }
}dlx;
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        dlx.init(n,m);
        for(int i=1; i<=n; i++){
            int num,j;
            scanf("%d",&num);
            while(num--){
                scanf("%d",&j);
                dlx.Link(i,j);
            }
        }
        if(!dlx.dance(0)) printf("NO\n");
        else{
            printf("%d",dlx.ansd);
            for(int i=0; i<dlx.ansd; i++){
                printf(" %d",dlx.ans[i]);
            }
            printf("\n");
        }
    }
    return 0;
}


八股文(Unity篇) 在Unity中,协程是通过迭代器实现的,即将协程函数的返回值类型定义为IEnumerator,然后使用yield语句暂停协程的执行,并在需要恢复执行时通过MoveNext()方法继续执行。Unity中的协程是一种能够在主函数中暂停和恢复执行的功能,它使用了C#的迭代器。Resources方式:Resources方式:使用Resources.Load方法加载Resources文件夹下的资源,这种方式的好处是简单易用,无需手动打包资源,但是会导致应用包变得较大,加载速度较慢,不适合较大的资源文件。 阅读详情

相关推荐

Aveva Marine C# 二次开发入门001

1# 引用 C:\AVEVA\Marine\OH12.1.SP4\Aveva.ApplicationFramework.dll C:\AVEVA\Marine\OH12.1.SP4\Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.ApplicationFramework.Presentation;usi...

weixin_30245867的博客 1911

算法与数据结构-精确覆盖

在一个全集X中若干子集的集合为S,精确覆盖(Exact cover)是指,S的子集S*,满足X中的每一个元素在S*中恰好出现一次。[1] 在计算机科学中,精确覆盖问题指找出这样的一种覆盖,或证明其不存在。这是一个NP-完全问题[1],也是卡普的二十一个NP-完全问题之一[2]。 定义 满足以下条件的集合为一个精确覆盖: S*中任意两个集合没有交集,即X中的元素在S*中出现最多一次S*中

倚风语的专栏 1467

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 1538

精确覆盖问题

精确覆盖问题(Exact Cover Problem),指给定许多集合Si(1≤i≤n)S_i\left(1\le i\le n\right)Si​(1≤i≤n), 以及集合X⊂SX\subset SX⊂S,求满足以下条件的无序多元组(T1,T2,⋯ ,Tm)\left(T_1,T_2,\cdots,T_m\right)(T1​,T2​,⋯,Tm​):(001011010010010110010100100001000010001101) \left(\begin{array}{lllllll} 0 & 0

思维缜密的博客 1486

嵌入式SPI总线抽象设计:跨平台驱动与分层解耦实践

SPI(串行外设接口)是嵌入式系统中应用最广泛的同步串行通信协议,其核心价值在于高吞吐、低开销与硬件简洁性。其工作原理基于主从架构、全双工/半双工时序及片选(CS)控制,依赖CPOL/CPHA组合定义四种标准模式。在工程实践中,SPI常面临硬件资源受限、多外设共用总线、MCU平台迁移等挑战,导致驱动复用率低、维护成本高。通过结构体+函数指针实现的分层抽象——将物理总线、协议适配与设备驱动解耦,可显著提升代码可移植性与扩展性。该方法天然支持硬件SPI与GPIO模拟SPI双模式切换,并已在STM32等主流MCU

weixin_42601134的博客 60

今日头条面试——iOS开发面试题

layoutIfNeeded和setNeedsLayout的区别。* Pod update和pod install的区别。* 10、autoreleasepool的使用场景。* 如何hook一个对象的方法,而不影响其它对象。* 数组cop后里面的元素会复制一份新的吗。* 介绍项目,主要介绍自己强项一点的地方。* assing可以使用在对象中吗。* isEquel和hash的关系。* 4、谈谈runtime的理解。* 8、谈谈runloop的理解。* copy和strong的区别。

FPGA/MATLAB学习教程/源码/项目合作开发 594

舞蹈链 —— 精确覆盖 模板

DancingLinks(精确覆盖模板):Dancing Links(精确覆盖模板):DancingLinks(精确覆盖模板): #include&amp;amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;amp;gt; using namespace std; typedef long long ll; #define N 9*9*9*9*9*4+10 #define M 9*9*9+10 struct DancingLin...

Scar_Halo 372

【GameFramework框架】7-2、GameFramework框架是否“过度设计”?

框架是否过度设计,这个问题其实我被问到很多次了。不仅仅是新手刚接触就觉得“过度设计”的评价,有些熟练的开发者也会有这种感觉。那么,这篇文章就来探究一下,为什么框架会让人感觉“过度设计”,以及框架如何设计,还有,如何让框架适应自己的节奏。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2120

漫谈算法(三)NP问题

Keywords: NP Problme; NP-hard Problem; NP-complete Problem; P Problem [为什么写这类文章]漫谈算法(零)序 [这系列文章里会用到的一下符号和公式] 漫谈算法(番外篇) 符号标记以及基本数学公式 首先解释一下什么是NP问题,什么是NP hard问题,什么是NP完全问题。 看下面的图,他们之间的关系表示的...

deming0505的专栏 474

把 ABAP 选择屏幕 Selection Screen 打造成可维护的交互面板:常用屏幕元素与动态控制全解析

本文详细介绍了ABAP报表中Selection Screen的设计技巧,包括空行(SKIP)、横线(ULINE)、注释(COMMENT)等基础元素的使用方法,以及如何通过MODIF ID实现动态界面调整。重点讲解了行内布局(BEGIN OF LINE)、按钮(PUSHBUTTON)和区块(BLOCK)等高级功能,帮助开发者将选择屏幕从"能用"提升到"好用、易扩展、可维护"的水平。文章还分享了项目实践中的命名规范和分组策略,特别适合需要优化ABAP报表用户体验的开发人员

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 332

芒果YOLO11改进23:主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 406

1017 - Exact cover

时间限制:15秒 内存限制:128兆自定评测 5584 次提交 2975 次通过题目描述There is an N*M matrix with only 0s and 1s, (1 &lt;= N,M &lt;= 1000). An exact cover is a selection of rows such that every column has a 1 in exactly one of...

树洞里的刺猬的博客 500

ZYNQ Petalinux编译系统启动文件实战指南

本文提出的混合编译加速方案实测可将编译时间从45分钟缩短至18分钟,QSPI双启动方案已在工业控制领域成功应用。Xilinx官方UG1144文档(最新v2023.1版)正点原子《ZYNQ嵌入式开发实战》开源项目Meta-Petalinux(GitHub趋势项目)未来展望:随着Versal平台的普及,Petalinux将支持更多AI加速器原生驱动,值得持续关注。

QQ_778132974的博客 813

HUST 1017 Exact cover(舞蹈链&不能为了ac而ac)

题目链接:[kuangbin带你飞]专题三 Dancing Links A - Exact cover题意 给定一01矩阵,问是否能够精确覆盖(就是选取任意行,这些行的1所在的列互不冲突且完整覆盖所有列),若有输出行号(要按递增顺序输出),否则输出NO。 思路ps:两个礼拜前大略看了下舞蹈链(虽然英文名听起来更高端,但还是更喜欢它的中文名字),很妙但也让人一看就惰性必生不愿再看,今天耐心再仔细理

YiShi's Blog 2687

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

hust 1017 Exact cover 最小覆盖问题 dancing links

虽然已经退役,但是还是希望能够补一补自己不会的东西,昨天学习了dancing links(舞蹈链),然后做了这个入门级的水题,前后代码重写了好几次,现在算是自己理解了dancing links。 言归正传。 这道题的意思是,从一个01矩阵中选出若干个行,使得这些行组成的矩阵满足恰好每列有且仅有一个1,换句话说,有这些行,恰好可以覆盖每个列 解题思路如下: 1、选出一个列c,然后找能够覆

renew 1421

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【HUST】1017 Exact cover 精确覆盖入门题——Dancing Links

传送门:【HUST】1017 Exact cover 题目分析:Dancing Links m

poursoul 947

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

裸的模板题HUST 1017 Exact cover(舞蹈链&不能为了ac而ac)

There is an N*M matrix with only 0s and 1s, (1 &lt;= N,M &lt;= 1000). An exact cover is a selection of rows such that every column has a 1 in exactly one of the selected rows.  Try to find out the sel...

mlm5678的博客 289

HUST 1017. Exact cover(Dancing Links存储matrix,dfs)

Problem There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is a selection of rows such that every column has a 1 in exactly one of the selected rows. Try to find out the selected rows. Input There are multiply test cases.

Jacob0824的博客 734

HUST 1017 Exact cover 跳舞链(DLX) 模板题目

http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=10702 题意: 给你一个n*m的01矩阵,让你选择若干行使这些行中的1能够覆盖所有的列,而且不能出现重复覆盖。输出所选的行。 思路: 这是跳舞链的模板题目。不多说了。 给出个人觉得讲解比较好的链接:http://blog.youkuaiyun.com/mu399/art...

weixin_34092370的博客 158

HUST 1017 Exact cover (DLX模板题)

DESCRIPTION There is an N*M matrix with only 0s and 1s, (1 INPUT There are multiply test cases. First line: two integers N, M; The following N lines: Every line first comes an integer C(1 OUTPUT

Misdom_Tian_Ya的专栏 462

用Dancing Links求解精确覆盖问题

跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题 精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1 例如:如下的矩阵 就包含了这样一个集合(第1、4、5行)   如何利用给定的矩阵求出相应的行的集合呢?我们采用回溯法   矩阵1:   先假定

QC的博客 1645

舞蹈链模板题汇总

舞蹈链有两种模型,精确覆盖,多重覆盖。精确覆盖HUST 1017//#pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <vector

r_clover的博客 791

舞蹈链纯模板(kuangbin)hust1017

//  main.cpp //  舞蹈链 //  Created by liuzhe on 16/11/30. //  Copyright © 2016年 my_code. All rights reserved. #include #include #include #include #include #include #i

The_star_is_at的博客 703

舞蹈链(Dancing Links)算法

关于舞蹈链,可以看以下两篇博客: 跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题 http://www.cnblogs.com/grenet/p/3145800.html 算法实践——舞蹈链(Dancing Links)算法求解数独 http://www.cnblogs.com/grenet/p/3163550.html 或是看hihocoder上的两道

hermito的专栏 2452

模板_DancingLink(Algorithm X)

关于舞蹈链(DLX)原理传送门#include<cstdio> #include<cstring> #define N 9*9*9*9*9*4+10 #define M 9*9*9+10 struct DancingLink{ int n,s,ansd;//列数 节点总数 int S[M],A[M],H[M];//S[]该列节点总数 A[]答案 H[]行首指针 int

BeiYu 1260

舞蹈链应用之精确覆盖模板

这几天终于鼓起勇气学了舞蹈链这种数据结构,在联系的过程中发现一般分为两种情况 精确覆盖和重复覆盖 首先将一下精确覆盖,顾名思义就是覆盖全部的元素且只能覆盖一次 在代码实现的方面讲即给出的0_1矩阵中找到对应的行号使这些行组成组成的新矩阵每列只有一个1 模板: #include #include #include #include #include #i

扬帆起航 623
上一篇: SPOJ BALNUM (数位DP)
下一篇: HDU 5833
just_sort
博客等级 码龄11年 2357粉丝 1667原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值