最小点覆盖概念:选取最小的点数覆盖二分图中的所有边。

   最小点覆盖 = 最大匹配数。

   证明:首先假设我们求的最大匹配数为m,那么最小点覆盖必然 >= m,因为仅仅是这m条边就至少需要m个点。然后假如我们已经求得最小覆盖点集,那么在点集中每个点必然有着这样的性质,在于它相连的边里面,一定有一条边的端点不在最小点集中,因为如果连一条这样的边都没有,那这个点完全没有在最小点集的必要,我们任意选取这样的一条边,一定可以形成一个匹配,匹配数与最小点集中的点的个数相等,但现在这仅仅是一个匹配,他必然小于最大匹配,所以最小点覆盖 <= m,综上所述,最小点覆盖 = 最大匹配数,证明成立。

   ps:这个证明是我从网上看明白后总结出来的,个人感觉学姐的证明过于笼统,所以就放在了这里,感觉这个更加严密易懂(学知识要学明白嘛~)。

   代码如下:实现方法:基础匈牙利算法。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 1510
int n;
struct EDGE
{int to,nxt;
} edge[10*maxn];
int head[maxn],vis[maxn],match[maxn],tot;
void add_edge(int u,int v)
{edge[tot].to = v;edge[tot].nxt = head[u];head[u] = tot++;
}
bool Find(int u)
{for(int i = head[u]; i != -1; i = edge[i].nxt){int v = edge[i].to;if(!vis[v]){vis[v] = 1;if(match[v] == -1 || Find(match[v])){match[v] = u;return true;}}}return false;
}
int slove()
{memset(match,-1,sizeof(match));int ans = 0;for(int i = 0; i < n; i++){memset(vis,0,sizeof(vis));if(Find(i))ans++;}return ans;
}
int main()
{int num,a,b,t;while(~scanf("%d",&t)){n = t;memset(head,-1,sizeof(head));tot = 0;while(t--){scanf("%d:(%d)",&a,&num);for(int i = 0;i < num;i++){scanf("%d",&b);add_edge(a,b);add_edge(b,a);}}int ans = slove()/2;printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/jifahu/p/5521112.html

HDU 1054 Strategic Game 最小点覆盖相关推荐

  1. hdu 1054 Strategic Game 最小点覆盖 = 最大二分匹配

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1054 简单二分匹配,根据题意构造一个无向图.然后求最小点覆盖,然后扫描mark数组将曾经匹配的点所匹配 ...

  2. HDU - 1054 Strategic Game(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一棵树,现在要在节点上放置士兵,每个士兵可以监视与其所在的节点直接相连的节点,问最少需要多少个士兵才能将整棵树都监视到 题目分析:求最少的节点,以保证每条边都有一个端 ...

  3. hdu 1054 Strategic Game 二分图最小点覆盖

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题意: 给出一个无向图,求最小点覆盖. 思路: 用网络流来做设立一个超级源点和一个超级汇点. 每 ...

  4. HDU——1054 Strategic Game

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. HDU - 3360 National Treasures(最小点覆盖-二分图最大匹配+奇偶拆点)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,每个点都有一个权值,-1表示该格子为警卫,否则表示该格子有宝物: 当前点的权值二进制为1的地方代表需要一个警卫(编号为二进制从右往左数的位置),警卫 ...

  6. HDU - 1150 Machine Schedule(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:现在有一个机器A和一个机器B,A机器有n种模式,B机器有m种模式,现在有k次工作需要完成,每次工作的信息为: id x y:编号为id,在A机器要用x模式完成,在B机器要 ...

  7. hdu 1054 Strategic Game

    http://acm.hdu.edu.cn/showproblem.php?pid=1054 树形DP 主要是把思路屡清楚 选个根结点进行向下搜 每个点都有两种可能 放士兵还是不放 防止重复搜索就可以 ...

  8. HDU - 1054 Strategic Game (二分图匹配模板题)

    二分图匹配模板题 #include <bits/stdc++.h> #define FOPI freopen("in.txt", "r", stdi ...

  9. 【POJ - 1463】Strategic game (树上最小点覆盖,树形dp)

    题干: Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the ...

最新文章

  1. PaddleOCR,一款文本识别效果不输于商用的Python库!
  2. Java I/O系统学习系列一:File和RandomAccessFile
  3. libevent -简单的异步IO介绍
  4. 使用区分优先级的负载分流法确保Netflix的可靠性
  5. Samba 服务共享
  6. php视频上传教程,php上传视频的代码_PHP教程
  7. CVPR2020 | 遮挡也能识别?地平线提出用时序信息提升行人检测准确度
  8. openwrt gstreamer实例学习笔记(四. gstreamer Bins)
  9. 动态规划入门(一)——数字三角形
  10. GetCommandLineW()作用
  11. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第2天
  12. Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
  13. 二进制文件转成文本保存,并可以读回
  14. 小红帽系统进入oracle,11G RAC 安装在红帽6上,grid跑root.sh报错
  15. html未点击背景 点击背景,vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)...
  16. VC++ IE缓存管理研究
  17. SIM800A模块发短信调试中出现的问题并解决
  18. 人工神经网络翻译的优点,神经网络机器翻译技术
  19. 当代中国社会划分为十大阶层
  20. mysql课程设计论文_课程设计项目源码,课程设计毕业设计项目,计算机毕业设计网 - 代码货栈...

热门文章

  1. 数据结构——二叉树的遍历
  2. 烂泥:CentOS6.5挂载windows共享文件夹
  3. [转]消息队列软件大比拼
  4. UCOS 操作系统 安装配置环境
  5. 巧用事件查看器维护服务器安全
  6. 介绍 Java 平台的 Jazzy:一种新的拼写检查器 API
  7. cs专业学生对于家乡的思考
  8. 【转】OpenMP 入门教程
  9. Android ViewModel+liveData+lifecycle+databinding打造MVVM
  10. js导入导出总结与实践