hdu1150 最小点覆盖集的一个小小的变形
2015-06-09 19:23
246 查看
//这道是最小点覆盖集的应用
//最小点覆盖,覆盖的是所有的边,而不是所有的点
//在这个题目中,我们的本意是,从所有的模式中选出最少的几个模式来覆盖完全的任务点,但是,这与我们的最小点覆盖却还是区别的
//那么我们应该怎么构图呢?怎么才可以把对点的覆盖转化为对边的覆盖呢?
//我们只需要将能够完成相同任务的点相连就ok了,如果这些边都已经全部覆盖了的话,那么所有的任务也就一定要被覆盖。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <stack>
#include <list>
#include <limits.h>
using namespace std;
#define N 110
#define maxdata 1000000
int match
;
int used
;
int map
;
int ans =0;
int m,n,k,l;
int dfs(int x ,int l)
{
for(int i = 1 ;i<=l;i++)
{
if(map[x][i]==1&&used[i]==0)
{
used[i]=1;
if(match[i]==-1||dfs(match[i],l)==1)
{
match[i]=x;
return 1 ;
}
}
}
return 0 ;
}
int main()
{
while(scanf("%d",&m)&&m>0)
{
ans = 0 ;
memset(map,0,sizeof(map));
memset(match,-1,sizeof(match));
scanf("%d%d",&n,&k);
while(k--)
{
int x ,y ;
scanf("%d%d%d",&l,&x,&y);
map[x][y]=1;
}
l = m>n? m :n;
for(int i = 1 ;i<=m;i++)
{
memset(used,0,sizeof(used));
if(dfs(i,l)==1) ans++;
}
printf("%d\n",ans);
}
return 0;
}
//最小点覆盖,覆盖的是所有的边,而不是所有的点
//在这个题目中,我们的本意是,从所有的模式中选出最少的几个模式来覆盖完全的任务点,但是,这与我们的最小点覆盖却还是区别的
//那么我们应该怎么构图呢?怎么才可以把对点的覆盖转化为对边的覆盖呢?
//我们只需要将能够完成相同任务的点相连就ok了,如果这些边都已经全部覆盖了的话,那么所有的任务也就一定要被覆盖。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <stack>
#include <list>
#include <limits.h>
using namespace std;
#define N 110
#define maxdata 1000000
int match
;
int used
;
int map
;
int ans =0;
int m,n,k,l;
int dfs(int x ,int l)
{
for(int i = 1 ;i<=l;i++)
{
if(map[x][i]==1&&used[i]==0)
{
used[i]=1;
if(match[i]==-1||dfs(match[i],l)==1)
{
match[i]=x;
return 1 ;
}
}
}
return 0 ;
}
int main()
{
while(scanf("%d",&m)&&m>0)
{
ans = 0 ;
memset(map,0,sizeof(map));
memset(match,-1,sizeof(match));
scanf("%d%d",&n,&k);
while(k--)
{
int x ,y ;
scanf("%d%d%d",&l,&x,&y);
map[x][y]=1;
}
l = m>n? m :n;
for(int i = 1 ;i<=m;i++)
{
memset(used,0,sizeof(used));
if(dfs(i,l)==1) ans++;
}
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- Hadoop伪分布式部署
- 32位和64位各变量字节数
- Java——(三)Collection之Set集合、HashSet类
- hdu2206IP的计算
- scala快速学习笔记(三):Collections,包
- MD5原理
- Python中zip()函数用法举例
- apue.h: No such file or directory
- 【hadoop】5002-Hadoop2.x 集群搭建准备
- OpenCV+Android开发配置
- UVA11991--Easy Problem from Rujia Liu?
- Leetcode[18]-4Sum
- 集锦
- 第十四周 阅读程序二
- Yii2 使用十七 国际化
- JDK各个版本的新特性jdk1.5-jdk8
- 20150526数据编码
- java.net.URISyntaxException的解决办法
- 如何进行Android客户端的优化?
- 软件文档知多少?