二分图匹配求最小点覆盖

把两个机器作为两个集合,把每个任务当做边建图.那么所求的就是二分图的最小点覆盖.

但是最开始WA了,原因在于,题目要求的是变换的次数,也就是与0连的边需要删去.

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. int init(){
  8. int rv=0,fh=1;
  9. char c=getchar();
  10. while(c<'0'||c>'9'){
  11. if(c=='-') fh=-1;
  12. c=getchar();
  13. }
  14. while(c>='0'&&c<='9'){
  15. rv=(rv<<1)+(rv<<3)+c-'0';
  16. c=getchar();
  17. }
  18. return fh*rv;
  19. }
  20. int n,m,k,g[105][105],match[105];
  21. bool f[105];
  22. bool hungarian(int u){
  23. for(int i=1;i<=g[u][0];i++){
  24. int v=g[u][i];
  25. if(!f[v]){
  26. f[v]=1;
  27. if(match[v]==-1||hungarian(match[v])){
  28. match[v]=u;
  29. return 1;
  30. }
  31. }
  32. }
  33. return 0;
  34. }
  35. int main(){
  36. while(1){
  37. n=init();
  38. if(!n) break;
  39. m=init();k=init();
  40. memset(g,0,sizeof(g));
  41. for(int i=0;i<=n;i++) match[i]=-1;
  42. for(int i=1;i<=k;i++){
  43. int t=init(), u=init(),v=init();
  44. if(u&&v) g[u][++g[u][0]]=v;
  45. }
  46. int ans=0;
  47. for(int i=1;i<n;i++){
  48. memset(f,0,sizeof(f));
  49. if(hungarian(i)) ans++;
  50. }
  51. cout<<ans<<endl;
  52. }
  53. return 0;
  54. }

HDU [P1150] Machine Schedule的更多相关文章

  1. 匈牙利算法模板 hdu 1150 Machine Schedule(二分匹配)

    二分图:https://blog.csdn.net/c20180630/article/details/70175814 https://blog.csdn.net/flynn_curry/artic ...

  2. hdu 1150 Machine Schedule 最少点覆盖转化为最大匹配

    Machine Schedule Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  3. hdu 1150 Machine Schedule 最少点覆盖

    Machine Schedule Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  4. hdu 1150 Machine Schedule(二分匹配,简单匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 Machine Schedule Time Limit: 2000/1000 MS (Java/ ...

  5. hdu 1150 Machine Schedule(最小顶点覆盖)

    pid=1150">Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/327 ...

  6. hdu 1150 Machine Schedule (二分匹配)

    Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. HDU——1150 Machine Schedule

    Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. 二分图最大匹配(匈牙利算法)简介& Example hdu 1150 Machine Schedule

    二分图匹配(匈牙利算法) 1.一个二分图中的最大匹配数等于这个图中的最小点覆盖数 König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数.如果你还不知 ...

  9. POJ 1325、ZOJ 1364、HDU 1150 Machine Schedule - from lanshui_Yang

    Problem Description As we all know, machine scheduling is a very classical problem in computer scien ...

随机推荐

  1. 51 Nod 1119

    机器人走方格 V2 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N ...

  2. flume1.8 Sinks类型介绍(三)

    1. Flume Sinks 1.1 HDFS Sink 该sink把events写进Hadoop分布式文件系统(HDFS).它目前支持创建文本和序列文件.它支持在两种文件类型压缩.文件可以基于数据的 ...

  3. 在echarts3中使用字符云

    echarts2的官方API里是带有字符云的,但到了echarts3就被从官网上移除了,想要使用的话可以从github上下载: 下载地址:https://github.com/ecomfe/echar ...

  4. Javascript Array 非常用方法解析

    在ECMAScript5的Array中已经有了Array.prototype.forEach,Array.prototype.filter,Array.prototype.map等方法 1. map ...

  5. 十二个 ASP.NET Core 例子——中间件

    目录: 什么是中间件(IApplicationBuilder) 创建 顺序规则 Asp.Net Core 内置的中间件 1.什么是中间件 官方:中间件是组装成应用程序管道以处理请求和响应的软件.每个组 ...

  6. NSMutableArray 记住取不到时要进行强转

    NSMutableArray  记住取不到时要进行强转

  7. Codeforces 900D Unusual Sequences 容斥原理

    题目链接:900D  Unusual Sequences 题意: 给出两个数N,M.让你求数列(和为M,gcd为N)的个数. 题解: 首先,比较容易发现的是M%N如果不为零,那么一定不能构成这样的序列 ...

  8. mysql查询语句处理

    两表做链接查询,   查理处理顺序各个阶段: 1) From: 对From子句中的坐标<left_table>和右表<right_table>执行笛卡尔积,产生虚拟表T1: 2 ...

  9. github not authorized eclipse

    eclipse/myeclipse > menu window > preferences > general > security > content >git ...

  10. html input验证只能输入数字,不能输入其他

    html input验证只能输入数字,不能输入其他 此方法为借鉴别人的,在此只做记录. <input type="text" onkeyup="if(!/^\d+$ ...