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

冷不防 2022-12-22 08:40 289阅读 0赞

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模式不用转换。。。,

  1. /***************************
  2. # 2013-9-3 13:34:42
  3. # Time: 0MS Memory: 240K
  4. # Author: zyh
  5. # Status: Accepted
  6. ***************************/
  7. #include<stdio.h>
  8. #include<string.h>
  9. #define N 105
  10. int m,n;
  11. bool G[N][N],vis[N];
  12. int link[N];
  13. bool dfs(int x){
  14. for(int i=1;i<=m;i++){
  15. if(G[x][i]&&!vis[i]){
  16. vis[i]=1;
  17. if(link[i]==-1 || dfs(link[i])){
  18. link[i]=x;
  19. return 1;
  20. }
  21. }
  22. }
  23. return 0;
  24. }
  25. int main()
  26. {
  27. int sum,x,y,i,k;
  28. while(scanf("%d",&n),n)
  29. {
  30. memset(G,0,sizeof(G));
  31. memset(link,-1,sizeof(link));
  32. scanf("%d%d",&m,&k);
  33. while(k--){
  34. scanf("%d%d%d",&i,&x,&y);
  35. G[x][y]=1;
  36. }
  37. for(sum=0,i=1;i<=n;i++){
  38. memset(vis,0,sizeof(vis));
  39. if(dfs(i)) sum++;
  40. }
  41. printf("%d\n",sum);
  42. }
  43. return 0;
  44. }

发表评论

表情:
评论列表 (有 0 条评论,289人围观)

还没有评论,来说两句吧...

相关阅读

    相关 HDU 1150(覆盖)

    题意:经典的机器调度问题。 在二分图G=(X,Y;E)中求取最少的顶点集v\(在{X,Y}中找),使得边ei (属于E)都和至少一个顶点vi(属于v\)相关联。这就是二分图模