hdu 题目1150 Machine Schedule(最小点覆盖)

来源:互联网 发布:残留webshell 编辑:程序博客网 时间:2024/05/16 07:00

http://acm.hdu.edu.cn/showproblem.php?pid=1150


没有考虑从0号开始o(╯□╰)o,但是AC了,最小点覆盖,工作看做边,A的模式为X点集合, B的模式为Y点集合,

需要用最少的点,做完所有工作(关联到所有边),即最小点覆盖

还有,题目上没说x,y的范围。(如果就是0,1,2,3,....)的话,只要判断link[y]是否为0即可,如果有的话,一开始处于0模式不用转换。。。,


/***************************# 2013-9-3 13:34:42 # Time: 0MS   Memory: 240K# Author: zyh# Status: Accepted***************************/ #include<stdio.h>#include<string.h>#define N 105int m,n;bool G[N][N],vis[N];int link[N];bool dfs(int x){for(int i=1;i<=m;i++){if(G[x][i]&&!vis[i]){vis[i]=1;if(link[i]==-1 || dfs(link[i])){link[i]=x;return 1;}}}return 0;}int main(){int sum,x,y,i,k;while(scanf("%d",&n),n){memset(G,0,sizeof(G));memset(link,-1,sizeof(link));scanf("%d%d",&m,&k); while(k--){scanf("%d%d%d",&i,&x,&y);G[x][y]=1;}for(sum=0,i=1;i<=n;i++){memset(vis,0,sizeof(vis));if(dfs(i)) sum++;}printf("%d\n",sum);}return 0;}