题意: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;
}

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重复覆盖

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

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

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

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

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

  7. HDU 3498 whosyourdaddy(Dancing_Links重复覆盖)

    题目地址 题意:给你n个城市,m条道路,每次摧毁一个城市会附带把与它直接连接的城市的摧毁,一个城市可以重复摧毁(如果不能重复就是精确覆盖了),问你最少摧毁多少个城市能把所有城市摧毁. 思路:我们可以构 ...

  8. HDU 4398 whosyourdaddy 精确覆盖,允许重复覆盖

    题目大意:有n个点,其中一些点是相连的.领主的攻击具有溅射,即攻击一个点,此点相邻的点也会收到攻击.问,领主最少攻击多少次,使得每个点都至少被攻击一次. 与传统精确覆盖相比,此题允许重复覆盖.那么,我 ...

  9. hdu 3498 whosyourdaddy

    Dancing Links 重复覆盖问题~ 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3498 这两天学习了Dancing Links  ,它主要 ...

最新文章

  1. Android开发之大位图二次采样压缩处理(源代码分享)
  2. 安装redis及python redis模块
  3. Impress.js教程
  4. python流程控制语法_005 Python语法之流程控制
  5. a:hover伪类在ios移动端浏览器内点击无效的解决方法
  6. mysql更新数据索引慢_mysql添加索引,查询反而变慢
  7. java开发怎么打补丁_[Java教程]【NC】出补丁与打补丁
  8. [Python人工智能] 二十四.易学智能GPU搭建Keras环境实现LSTM恶意URL请求分类
  9. 一个使用JAVA xmlencoder 例子
  10. java 正则表达式 替换括号,Java正则表达式:如何替换方括号内的所有字符?
  11. C/C++ atof函数 - C语言零基础入门教程
  12. 年底了,小心这些现象。别再无动于衷
  13. ICCV2021 | 如何高效视频定位?QMUL北大Adobe强强联手提出弱监督CRM,性能SOTA
  14. QT.pro工程文件中判断宏定义是否存在
  15. 管理感悟:如何看待培训
  16. word文档总让正文与目录分开在不同的页——分页符的使用
  17. 为eclipse3.6安装subversive插件
  18. 初识Exchange2010
  19. WPF系列教程(十九):日期控件——Calendar、DatePicker日历控件
  20. 青浦区服务器维修,青浦区DNS服务器地址

热门文章

  1. 量子隐形传态过程的推导(Quantum teleportation)
  2. 重庆北大青鸟解放碑校区J12班 五杀摇滚乐队【权限管理系统】
  3. GraphQL 渐进学习 06-graphql-采用-mockjs-mock数据
  4. tomcat服务器部署404问题解决方案
  5. Android 获取USB输入设备信息/区分虚拟键盘和外接键盘输入
  6. 性能测试~性能测试方案
  7. for i,x in enumerate() 函数解释
  8. 分布式操作层Distributed Operation Layer(DOL)入门
  9. windows文件夹锁
  10. 编写程序,实现猜数小游戏。