最小点覆盖 hdu--1054
最小点覆盖=最大二分匹配的 (单向图) ;
最小点覆盖=最大二分匹配的一半 (双向图) ;
所以我们只需求最大匹配,用 匈牙利算法 求出最大匹配,除以二得到答案
具体算法都已经给出相关链接;下面给出自己AC 代码
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string>
#include<string.h>
#include<stdlib.h> using namespace std;
typedef long long int LL;
const int MAXSIZE=10000; struct Edge
{
int s,t;
};
Edge edge[MAXSIZE];
int first[MAXSIZE],nexts[MAXSIZE];
int link[MAXSIZE];
bool vis[MAXSIZE];
int tot; void init()
{
memset(first,-1,sizeof(first));
memset(link,-1,sizeof(link));
tot=0;
}
void addedge(int s,int t)
{
edge[tot].s=s,edge[tot].t=t;
nexts[tot]=first[s];
first[s]=tot;
tot++;
}
int dfs(int now)
{
for(int i=first[now];i!=-1;i=nexts[i])
{
int to=edge[i].t;
if(!vis[to])
{
vis[to]=true;
if(link[to]==-1||dfs(link[to]))
{
link[to]=now;
return 1;
}
}
}
return 0;
}
int max_match(int n)
{
int ans=0;
for(int i=0;i<n;i++)
{
memset(vis,0,sizeof(vis));
ans+=dfs(i);
}
return ans;
}
int main()
{
int n;
while(scanf("%d",&n)+1)
{
init();
for(int i=0;i<n;i++)
{
int t1,t2;
scanf("%d:(%d)",&t1,&t2);
while(t2--)
{
int num;
scanf("%d",&num);
addedge(t1,num);
addedge(num,t1);
}
}
printf("%d\n",max_match(n)>>1);
}
return 0;
}
最小点覆盖 hdu--1054的更多相关文章
- HDU - 1054 Strategic Game(二分图最小点覆盖/树形dp)
d.一颗树,选最少的点覆盖所有边 s. 1.可以转成二分图的最小点覆盖来做.不过转换后要把匹配数除以2,这个待细看. 2.也可以用树形dp c.匈牙利算法(邻接表,用vector实现): /* 用ST ...
- 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 1054 Strategic Game 最小点覆盖
最小点覆盖概念:选取最小的点数覆盖二分图中的所有边. 最小点覆盖 = 最大匹配数. 证明:首先假设我们求的最大匹配数为m,那么最小点覆盖必然 >= m,因为仅仅是这m条边就至少需要m个点.然后 ...
- HDU 1054 Strategic Game (最小点覆盖)【二分图匹配】
<题目链接> 题目大意:鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心.现在,他有以下的问题.他必须捍卫一个中世纪的城市,形成了树的道路.他把战士的 ...
- hdu 1054(最小点覆盖集)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1054 Strategic Game(最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题目大意:给你一棵树,选取树上最少的节点使得可以覆盖整棵树. 解题思路: 首先树肯定是二分图,因 ...
- HDU 1150 Machine Schedule (二分图最小点覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 有两个机器a和b,分别有n个模式和m个模式.下面有k个任务,每个任务需要a的一个模式或者b的一个 ...
- HDU 1498 50 years, 50 colors(最小点覆盖,坑称号)
50 years, 50 colors Problem Description On Octorber 21st, HDU 50-year-celebration, 50-color balloons ...
- hdu 1498(最小点覆盖集)
50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 2236(二分图最小点覆盖+二分)
无题II Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 邁向IT專家成功之路的三十則鐵律 鐵律二十四:IT人歲月增長之道-智慧
老子曾經在道德經中提到:「以道為本而繁守不失的,可算是長久.身雖死亡而精神不朽的,可算是長壽」.人在世間最悲哀的莫過於老死,但最可貴的則莫過於智慧.只是人的智慧不一定會隨著年齡的增長與歲月的流逝而成長 ...
- 卸载ArcGISDesktop低版本程序遇到异常,如何完全卸载?
[解决办法]:正常情况下,运行 ArcGIS for Desktop 光盘中的 “冲突检测”工具,会自动完全卸载低版本的ArcGIS 程序.如果遇到异常无法卸载(例如安装过非正式版软件),如下位置是A ...
- sublime快捷键设置
1.sublime自带的快捷键设置:这里的super在mac下是指command键 右边的内容表示用户自定义的快捷键:比如如图所示command+d表示复制光标所在行 常用操作:复制粘贴什么的太常用的 ...
- Vue 字面量语法 vs 动态语法
初学者常犯的一个错误是使用字面量语法传递数值: <!-- 传递了一个字符串 "1" --> <comp some-prop="1">&l ...
- quick-cocos2d-x教程12:实现文本和password输入界面
用户输入账号和password输入是常见工能,如今用editbox来实现username和password输入.可是这个商业项目上常见功能,网上却没有找到教程.我就一步一步的实现.代码例如以下: fu ...
- Android数据自己主动更新库DataAutoRefresh
非常多android应用.比方音乐播放器.视频播放器.小说阅读器或者其他须要获取本地磁盘指定数据格式数据列表的应用,在磁盘数据有变化(新增或者删除.比方下载完毕,拔TF卡.换TF卡)时.须要自己主动更 ...
- caffe搭建以及初步学习--win7-vs2013-gtx650tiboost-cuda8.0-cifar10训练和测试-2-快速解决方案cifar10_quick_solver.prototxt
首先安装好显卡----已经装好了?喜大普奔!没装好?那就用cpu,也是一样的. 拷贝cudnn v5.0 头文件和库文件以及执行文件到cuda8中 -------------------------- ...
- CentOS安装配置
1.准备安装 1.1 系统简介 CentOS 是什么? CentOS是一个基于Red Hat 企业级 Linux 提供的可自由使用的源代码企业级的 Linux 发行版本.每个版本的 CentOS 都会 ...
- Java Base64加密、解密原理Java代码(转载)
博客来源:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是网络上最常见的用于传输8Bit字节代码的编码方 ...
- CF 445A(DZY Loves Chessboard-BW填充)
A. DZY Loves Chessboard time limit per test 1 second memory limit per test 256 megabytes input stand ...