题意:N(2 ≤ N ≤ 55)个点,M(0 ≤ M ≤ N*N)条无向边,删除一个点会把与其相邻的点一起删掉。问最少删几次能够删掉全部点。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3498

——>>N个点看成 N 个要被覆盖的列,每一个点作为一行,与其相邻的点的位置在这一行中标为 1,还有它自已的位置也标记为 1。。

这就是经典的反复覆盖问题了。。于是,DLX上场。。

#include <cstdio>
#include <cstring>const int MAXR = 55 + 10;
const int MAXC = 55 + 10;
const int MAXNODE = MAXR * MAXC;
const int INF = 0x3f3f3f3f;struct DLX
{int sz;int H[MAXR], S[MAXC];int row[MAXNODE], col[MAXNODE];int U[MAXNODE], D[MAXNODE], L[MAXNODE], R[MAXNODE];int Min;void Init(int n){for (int i = 0; i <= n; ++i){U[i] = D[i] = i;L[i] = i - 1;R[i] = i + 1;}L[0] = n;R[n] = 0;sz = n + 1;memset(S, 0, sizeof(S));memset(H, -1, sizeof(H));}void Link(const int& r, const int& c){row[sz] = r;col[sz] = c;D[sz] = D[c];U[D[c]] = sz;D[c] = sz;U[sz] = c;if (H[r] == -1){H[r] = L[sz] = R[sz] = sz;}else{R[sz] = R[H[r]];L[R[H[r]]] = sz;R[H[r]] = sz;L[sz] = H[r];}S[c]++;sz++;}void Remove(const int& c){for (int i = D[c]; i != c; i = D[i]){L[R[i]] = L[i];R[L[i]] = R[i];}}void Restore(const int& c){for (int i = U[c]; i != c; i = U[i]){L[R[i]] = i;R[L[i]] = i;}}int A(){int ret = 0;bool vis[MAXC];memset(vis, 0, sizeof(vis));for (int i = R[0]; i != 0; i = R[i]){if (!vis[i]){vis[i] = true;++ret;for (int j = D[i]; j != i; j = D[j]){for (int k = R[j]; k != j; k = R[k]){vis[col[k]] = true;}}}}return ret;}void Dfs(int cur){if (cur + A() >= Min) return;if (R[0] == 0){if (cur < Min){Min = cur;}return;}int c = R[0];for (int i = R[0]; i != 0; i = R[i]){if (S[i] < S[c]){c = i;}}for (int i = D[c]; i != c; i = D[i]){Remove(i);for (int j = R[i]; j != i; j = R[j]){Remove(j);}Dfs(cur + 1);for (int j = L[i]; j != i; j = L[j]){Restore(j);}Restore(i);}}void Solve(){Min = INF;Dfs(0);printf("%d\n", Min);}} dlx;int N, M;void Read()
{int a, b;dlx.Init(N);while (M--){scanf("%d%d", &a, &b);dlx.Link(a, b);dlx.Link(b, a);}for (int i = 1; i <= N; ++i){dlx.Link(i, i);}
}int main()
{while (scanf("%d%d", &N, &M) == 2){Read();dlx.Solve();}return 0;
}

转载于:https://www.cnblogs.com/clnchanpin/p/6914389.html

hdu - 3498 - whosyourdaddy(反复覆盖DLX)相关推荐

  1. hdu 3498 whosyourdaddy (重复覆盖,DLX+迭代加深A*)

    题意:有一个英雄,他有一个技能,可以使一个点和与他相邻的点受到伤害,问最少攻击几个点可以使所有点至少被伤害一次. 思路:DLX.很裸.设行为每一个点,列为攻击点,在这里行元素与列元素都为n.然后DLX ...

  2. hdu 3498 whosyourdaddy 重复覆盖

    #include <bits/stdc++.h> using namespace std; struct DLX {const static int maxn=64,maxm=64,max ...

  3. 【HDU】3498 whosyourdaddy 重复覆盖入门题

    传送门:[HDU]3498 whosyourdaddy 题目分析:重复覆盖入门题. 重复覆盖相对于精确覆盖有些地方不同,精确覆盖每次可以删除多行多列,但是重复覆盖每次只能删除一行多列,而且还需要可行性 ...

  4. hdu - 3498 - whosyourdaddy(重复覆盖DLX)

    题意:N(2 ≤ N ≤ 55)个点,M(0 ≤ M ≤ N*N)条无向边,删除一个点会把与其相邻的点一起删掉,问最少删几次可以删掉所有点. 题目链接:http://acm.hdu.edu.cn/sh ...

  5. HDU 3498 whosyourdaddy DLX重复覆盖

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=3498 题意: 有 n n个敌人,其中有mm对敌人互为邻居,当你攻击杀死一个敌人时,同时会杀死它所有的邻居 ...

  6. HDU 3498 whosyourdaddy(DLX重复覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3498         n个点,m条无向边,删除一个点会把与其相邻的点一起删掉,问最少删几次可以删掉所有 ...

  7. [DLX重复覆盖] hdu 3498 whosyourdaddy

    题意: 给N个怪,M个关系. 每个关系代表a和b是邻居. 然后问每次攻击你可以攻击一个怪以及它的全部邻居 问最少需要几次攻击能把怪全部杀死. 思路: 怪为行和列,然后对面每个怪的邻居都是这个怪的列建图 ...

  8. HDU 3498 whosyourdaddy(DLX+A*||多重覆盖)

    题意: 题意就是让你选最少的步数是的每个点至少被覆盖一次,多重覆盖模板题. 蛋疼的是,我把评估函数的辅助数组开大了,结果T的我不要不要的. 看懂只好还是比较好做的. 多重覆盖和精确覆盖的区别就是多重覆 ...

  9. HDU 3498 whosyourdaddy (可重复覆盖舞蹈链)

    题意: 给出N个点,M个边构成图.每选取一个点都可以覆盖其相邻点,问要覆盖所有点最少选几个点 思路: 每个点都作为一个点集,进行爆搜覆盖,舞蹈链模板题. 代码: #include <bits/s ...

最新文章

  1. 如何在elasticsearch里面使用深度分页功能
  2. 1-4月份我国软件业务收入15753亿元 同比增长13.1%
  3. [生物] - 怎样理解细胞分裂次数是有限制的
  4. 信息系统项目管理师复习第1小时
  5. anaconda新建python2环境安装不了jupyterlab_Anaconda 5.0.0 JupyterLab 0.27.0 中配置多Python环境支持...
  6. 【译】Diving Into The Ethereum VM Part 2 — How I Learned To Start Worrying And Count The Storage Cost
  7. Python学习【day02】-str类型方法记录
  8. 简单易懂,ThreadPoolExecutor参数说明
  9. python基础内容_python基础-python介绍
  10. 图像处理【代码合集】
  11. linux下使用fread读socket套接字的注意点
  12. shell脚本获取mysql插入数据自增长id的值
  13. python中不包不包括_Python文件部分(不包括数据)
  14. 君正T31 ACC解码
  15. 二进制算术编码 c语言,二进制算术编码纸上谈兵
  16. 简体中文原型设计工具对比
  17. iOS 数据归档解档
  18. 站在巨人肩膀上——vb.net学习
  19. ffmpeg将amr格式转成mp3格式
  20. Linux上的文件类型与默认图标

热门文章

  1. 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果...
  2. 性能瓶颈查找-火焰图分析
  3. Microsoft To-Do无法同步问题
  4. 2个准则,解决人际、团队和客户问题
  5. 谈Spring的事务管理
  6. 食物卡路里 mysql_减肥十律
  7. GeoMAN: Multi-level Attention Networks for Geo-sensory Time Series Prediction
  8. java 农历节日 转公历日期_公历农历互相转换的Java日历工具类
  9. 2017数模打怪升级总结
  10. RecyclerView.Adapter通用基类