HDU 1054 Strategic Game
2016-02-25 17:02
411 查看
题意:给定一个图每一个点能够观察到相邻的所有点,问最少需要多少个顶点就能够覆盖整个图。
思路:最小顶点覆盖问题,很基础,直接建图求最大匹配然后/2得答案,二分图的最小顶点覆盖直接就是最大匹配数。
思路:最小顶点覆盖问题,很基础,直接建图求最大匹配然后/2得答案,二分图的最小顶点覆盖直接就是最大匹配数。
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <queue> using namespace std; struct node { int v; int next; }d[1000000]; int head[2500]; int vis[2500]; int pre[2500]; int cnt; void add(int x,int y) { d[cnt].v=y; d[cnt].next=head[x]; head[x]=cnt++; } int dfs(int u) { for(int i=head[u];i!=-1;i=d[i].next) { int v=d[i].v; if(!vis[v]) { vis[v]=1; if(pre[v]==-1||dfs(pre[v])) { pre[v]=u; return 1; } } } return 0; } int main() { int n,x,y,m; while(~scanf("%d",&n)) { memset(head,-1,sizeof(head)); memset(pre,-1,sizeof(pre)); cnt=0; int ans=0; for(int i=0;i<n;i++) { scanf("%d:(%d)",&x,&m); for(int j=0;j<m;j++) { scanf("%d",&y); add(x,y); add(y,x); } } for(int i=0;i<n;i++) { memset(vis,0,sizeof(vis)); ans += dfs(i); } printf("%d\n",ans/2); } return 0; }
相关文章推荐
- 第三章:mysql proxy负载均衡与读写分离
- "Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)
- 下载
- C#生成图形验证码
- 数据库范式
- Valid Palindrome
- Pavilion M4-1016TX 加装固态硬盘(SSD)+UEFI+GPT安装WIN8.1
- iOS 移除所有子视图
- 字符串搜索算法总结
- 运行时runtime
- 极光推送的使用步骤
- 我理解的三个范式
- PHP基础
- HTTP协议(一):介绍
- struts2导出excel笔记
- Matlab中的静态(持久)变量和全局变量
- Objective-C中,遍历数组的四种方法
- HTTP协议初探
- as3 反向for循环测试总结
- shell获取 linux 系统的位数