hdu1150

来源:互联网 发布:贵州大数据产业 编辑:程序博客网 时间:2024/06/08 08:02

这道题目就是求最小定点覆盖,但是要注意一点,两台机器最初始的状态都是0,那么只要可以在0状态上完成的就不需要启动其他状态了,这样就不需要转换状态了,所以我们可以忽略与0相关的边,因为不需要转化时间,将重点放在不与0相关的边上,然后就是最小定点覆盖了,下面是代码:

#include <stdio.h>#include <stdlib.h>#include <cstring>#define Max 110int pre[Max];bool match[Max][Max];bool vi[Max];int n,m,k;bool find(int x){for(int i=0;i<m;i++){if(!vi[i] && match[x][i]){vi[i]=1;if(pre[i]==-1 || find(pre[i])){pre[i]=x;return 1;}}}return 0;}int main(){while(scanf("%d",&n),n){scanf("%d%d",&m,&k);    memset(pre,-1,sizeof(pre));memset(match,0,sizeof(match));int index,a,b;while(k--){scanf("%d%d%d",&index,&a,&b);if(a!=0 && b!=0)match[a][b]=1;}int ans=0;for(int i=0;i<n;i++){memset(vi,0,sizeof(vi));ans+=find(i);}printf("%d\n",ans);}return 0;}


 

0 0
原创粉丝点击