hdu1150(二分图最小顶点覆盖)

原创 2016年06月01日 17:51:33

Machine Schedule

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7792    Accepted Submission(s): 3895


Problem Description
As we all know, machine scheduling is a very classical problem in computer science and has been studied for a very long history. Scheduling problems differ widely in the nature of the constraints that must be satisfied and the type of schedule desired. Here we consider a 2-machine scheduling problem.

There are two machines A and B. Machine A has n kinds of working modes, which is called mode_0, mode_1, …, mode_n-1, likewise machine B has m kinds of working modes, mode_0, mode_1, … , mode_m-1. At the beginning they are both work at mode_0.

For k jobs given, each of them can be processed in either one of the two machines in particular mode. For example, job 0 can either be processed in machine A at mode_3 or in machine B at mode_4, job 1 can either be processed in machine A at mode_2 or in machine B at mode_4, and so on. Thus, for job i, the constraint can be represent as a triple (i, x, y), which means it can be processed either in machine A at mode_x, or in machine B at mode_y.

Obviously, to accomplish all the jobs, we need to change the machine's working mode from time to time, but unfortunately, the machine's working mode can only be changed by restarting it manually. By changing the sequence of the jobs and assigning each job to a suitable machine, please write a program to minimize the times of restarting machines. 
 

Input
The input file for this program consists of several configurations. The first line of one configuration contains three positive integers: n, m (n, m < 100) and k (k < 1000). The following k lines give the constrains of the k jobs, each line is a triple: i, x, y.

The input will be terminated by a line containing a single zero.
 

Output
The output should be one integer per line, which means the minimal times of restarting machine.
 

Sample Input
5 5 10 0 1 1 1 1 2 2 1 3 3 1 4 4 2 1 5 2 2 6 2 3 7 2 4 8 3 3 9 4 3 0
 

Sample Output
3


题目大意;有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。

二分图的最小顶点覆盖数=最大匹配数

本题就是求最小顶点覆盖数的。


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
const int N=555;///两边的最大数量
bool tu[N][N];
int from[N];///记录右边的点如果配对好了它来自哪里
bool use[N];///记录右边的点是否已经完成了配对
int n,m;///m,n分别表示两边的各自数量,n是左边,m是右边
bool dfs(int x)
{
    for(int i=1; i<=m; i++) ///m是右边,所以这里上界是m
        if(!use[i]&&tu[x][i])
        {
            use[i]=1;
            if(from[i]==-1||dfs(from[i]))
            {
                from[i]=x;
                return 1;
            }
        }
    return 0;
}
int hungary()
{
    int tot=0;
    memset(from,-1,sizeof(from));
    for(int i=1; i<=n; i++) ///n是左边,所以这里上界是n
    {
        memset(use,0,sizeof(use));
        if(dfs(i))
            tot++;
    }
    return tot;
}

int main()
{
    while(scanf("%d",&n)&&n)
    {
        int k;
        scanf("%d%d",&m,&k);
        memset(tu,0,sizeof(tu));
        while(k--)
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            tu[b][c]=1;
        }
        printf("%d\n",hungary());
    }
    return 0;
}


版权声明:本文为博主原创文章,若转载请注明转载地址http://blog.csdn.net/martinue。

poj-3041【二分图最小顶点覆盖】

自从看了二分图之后,感觉好多题目的解题方法真的跟以往的思维方式不一样了。。。。这可能就是抽象思维吧。 这个题目的意思是在网格中有k个小行星,你的炮弹只能一次只能摧毁一行或者一列的小行星,让你用求出最...
  • zq17865815296
  • zq17865815296
  • 2016年11月10日 15:41
  • 350

poj3041-Asteroids , 二分图的最小顶点覆盖数 = 最大匹配数

点击打开链接 二分图的最小顶点覆盖数 = 二分图的最大匹配数 题意: 在N*N的网络中有K颗小行星。小行星i的位置是(Ri, Ci)。现在有一个强力的武器能够用一发光束将一整行或一整列的小行星消灭...
  • yew1eb
  • yew1eb
  • 2014年07月12日 00:17
  • 1921

二分图最小顶点覆盖 hdu1150

http://acm.hdu.edu.cn/showproblem.php?pid=1150在二分图中求最少的点,让每条边都至少和其中的一个点关联,这就是“二分图的最小顶点覆盖”。 最小顶点覆盖=最...
  • aonaigayiximasi
  • aonaigayiximasi
  • 2016年03月13日 14:19
  • 182

二分图中对最小顶点覆盖、最小边覆盖、最大独立集的理解

仅仅用于自己理解,若有共鸣,别太吐槽就行哈~ 首先是匈牙利算法的本质:(图参考了zxy的) 这个图要详细看完,那么刚开始我想的“找小三”实际上就是递归找增广路的过程,如果找到增广路,匹配数...
  • Flynn_curry
  • Flynn_curry
  • 2016年10月29日 20:01
  • 2654

二分图最大匹配与最小顶点覆盖(教程系列)uva11419——我目前关于最大匹配最清晰的解释。

定义什么的百度拉拉,我只说证明. 1.假设我们现在已经用匈牙利算法求出了最大匹配,很明显现在已经木有增广路了(即未匹配->匹配->未匹配这些形式的路径,图里是木有的,不过一定要从下面说的那种特殊点开...
  • guoshiyuan484
  • guoshiyuan484
  • 2017年08月17日 16:00
  • 226

poj 3041 Asteroids( 最小顶点覆盖,二分图)

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20107   Acc...
  • acm_cxq
  • acm_cxq
  • 2016年07月27日 10:58
  • 287

二分图:最大独立集&最大匹配&最小顶点覆盖

最大独立集问题 Given N sets of integers, remove some sets so that the remaining all sets are disjoint wit...
  • lezong2011
  • lezong2011
  • 2013年08月10日 10:16
  • 1392

hdu 1498(二分图最小顶点覆盖)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1498 解题思路: 这题看上去很和二分图的最小顶点覆盖很相似,但关键怎么处理多个不同颜色的气球。 ...
  • hexianhao
  • hexianhao
  • 2016年07月27日 22:58
  • 293

HDU 1150 二分图最小顶点覆盖 解题报告

Machine ScheduleProblem DescriptionAs we all know, machine scheduling is a very classical problem in...
  • onepointo
  • onepointo
  • 2017年10月09日 21:14
  • 145

HDU1150最小顶点覆盖

Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others...
  • u012350533
  • u012350533
  • 2013年10月07日 09:30
  • 557
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu1150(二分图最小顶点覆盖)
举报原因:
原因补充:

(最多只允许输入30个字)