Strategic Game HDU - 1054(最小顶点覆盖)
最小顶点覆盖:用最少的点,让每条边都至少和其中一个点关联;
。。。以为自己很聪明。。用边连边。。。最后还是点连点 哎。。。。
hc 写的 匈牙利足够/////
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <queue>
- #include <algorithm>
- #include <cmath>
- #include <vector>
- #define mem(a, b) memset(a, b, sizeof(a))
- using namespace std;
- const int maxn = , INF = 0x7fffffff;
- int dx[maxn], dy[maxn], cx[maxn], cy[maxn], used[maxn];
- int nx, ny, dis, n;
- vector<int> G[maxn];
- int bfs()
- {
- queue<int> Q;
- dis = INF;
- mem(dx, -);
- mem(dy, -);
- for(int i=; i<=nx; i++)
- {
- if(cx[i] == -)
- {
- Q.push(i);
- dx[i] = ;
- }
- }
- while(!Q.empty())
- {
- int u = Q.front(); Q.pop();
- if(dx[u] > dis) break;
- for(int v=; v<G[u].size(); v++)
- {
- int i = G[u][v];
- if(dy[i] == -)
- {
- dy[i] = dx[u] + ;
- if(cy[i] == -) dis = dy[i];
- else
- {
- dx[cy[i]] = dy[i] + ;
- Q.push(cy[i]);
- }
- }
- }
- }
- return dis != INF;
- }
- int dfs(int u)
- {
- for(int v=; v<G[u].size(); v++)
- {
- int i = G[u][v];
- if(!used[i] && dy[i] == dx[u] + )
- {
- used[i] = ;
- if(cy[i] != - && dis == dy[i]) continue;
- if(cy[i] == - || dfs(cy[i]))
- {
- cy[i] = u;
- cx[u] = i;
- return ;
- }
- }
- }
- return ;
- }
- int hk()
- {
- int res = ;
- mem(cx, -);
- mem(cy, -);
- while(bfs())
- {
- mem(used, );
- for(int i=; i<=nx; i++)
- {
- if(cx[i] == - && dfs(i))
- res++;
- }
- }
- return res;
- }
- int main()
- {
- while(cin>> n)
- {
- for(int i=; i<maxn; i++) G[i].clear();
- for(int i=; i<n; i++)
- {
- int u, m;
- scanf("%d:(%d)",&u, &m);
- for(int j=; j<m; j++)
- {
- int v;
- scanf("%d",&v);
- G[u].push_back(v);
- G[v].push_back(u);
- }
- }
- nx = ny = n-;
- // cout<< rt<< " " << nx << " " <<endl;
- cout<< hk()/ <<endl;
- }
- return ;
- }
Strategic Game HDU - 1054(最小顶点覆盖)的更多相关文章
- I - Strategic Game - hdu 1054(最小点覆盖)
题意:用最小的点来覆盖全部的边,因为二分图里面最大的匹配就是最小覆盖,所以直接匹配一下即可 ****************************************************** ...
- hdu 1054(最小点覆盖集)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 1054 最小点覆盖
Sample Input 4 0:(1) 1 1:(2) 2 3 2:(0) 3:(0) 5 3:(3) 1 4 2 1:(1) 0 2:(0) 0:(0) 4:(0) Sample Output ...
- HDU ACM 1054 Strategic Game 二分图最小顶点覆盖?树形DP
分析:这里使用树形DP做. 1.最小顶点覆盖做法:最小顶点覆盖 == 最大匹配(双向图)/2. 2.树形DP: dp[i][0]表示i为根节点,而且该节点不放,所需的最少的点数. dp[i][1]表示 ...
- HDU - 1054 Strategic Game(二分图最小点覆盖/树形dp)
d.一颗树,选最少的点覆盖所有边 s. 1.可以转成二分图的最小点覆盖来做.不过转换后要把匹配数除以2,这个待细看. 2.也可以用树形dp c.匈牙利算法(邻接表,用vector实现): /* 用ST ...
- hdu 1150 Machine Schedule(最小顶点覆盖)
pid=1150">Machine Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/327 ...
- hdu1054(最小顶点覆盖)
传送门:Strategic Game 题意:用尽量少的顶点来覆盖所有的边. 分析:最小顶点覆盖裸题,最小顶点覆盖=最大匹配数(双向图)/2. #include <cstdio> #incl ...
- hdu1054最小顶点覆盖
最小定点覆盖是指这样一种情况: 图G的顶点覆盖是一个顶点集合V,使得G中的每一条边都接触V中的至少一个顶点.我们称集合V覆盖了G的边.最小顶点覆盖是用最少的顶点来覆盖所有的边.顶点覆盖数是最小顶点覆盖 ...
- HDU1054(KB10-H 最小顶点覆盖)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- jqgrid 基础应用
jqgrid 是一个在jquery基础上做的一个表格插件,以ajax的方式和服务器端通信. 一个jqgrid的基础示例(基础参数说明)如下: $("#jqGrid").jqGrid ...
- 微信小程序开发 [00] 写在前面的话,疯狂唠唠
我总是喜欢在写东西之前唠唠嗑,按照惯例会在博文的开篇写这么一段"写在前面的话",这次却为了这个唠嗑单独开了一篇文,大概预想着要胡说八道的话有点多. 前段时间突然对小程序来了兴趣,说 ...
- 第17章 EXTI—外部中断/事件控制器
第17章 EXTI—外部中断/事件控制器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...
- 基于Python自动发送QQ群消息
1.准备工作 此次测试基于python3,需要安装qqbot.bs4.requests库. qqbot项目地址:https://github.com/pandolia/qqbot.git pip qq ...
- Git与TortoiseGit基本操作
Git与TortoiseGit基本操作 1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(C ...
- 笔记:载入viewcontroller的几种方式
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; ...
- 20155202张旭 Exp4 恶意代码分析
20155202张旭 Exp4 恶意代码分析 实验前问题回答: 一:如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来 ...
- 20155308《网络攻防》 Exp1 PC平台逆向破解(5)M
20155308<网络攻防> Exp1 PC平台逆向破解(5)M 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是 ...
- 【Orleans开胃菜系列2】连接Connect源码简易分析
[Orleans开胃菜系列2]连接Connect源码简易分析 /** * prism.js Github theme based on GitHub's theme. * @author Sam Cl ...
- Redis介绍及Jedis基础操作
1.Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes ...