hdu-1150 Machine Schedule(二分图,最大匹配,匈牙利算法)

题目链接:

Machine Schedule

题意:

有两台机器A和B,A机器有n种工作方式,B机器有m种工作方式。共有k个任务。每个任务恰好在一条机器上运行。

如果任务在A机器上运行,就需要转换为模式Xi,如果在B机器上运行,就需要转换为模式Yi。

每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。

请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。

思路:

把机器A的N种模式作为二分图的左部,机器B的M种模式作为二分图的右部,如果某个任务可以使用机器A的模式xi也可以使用机器B的模式yi完成,则连接xi,yi。

题目要求使机器重启的次数要尽量少,又要把所有的任务都执行完,也就可以把题目转换成最小顶点覆盖,根据二分图的性质:最小顶点覆盖=最大匹配数。

AC代码如下:

#include
#include
#define N 202  
int vis[N];    //记录y中节点是否使用 0表示没有访问过,1为访问过  
int link[N];   //记录当前与y节点相连的x的节点  
int map[N][N]; //记录连接x和y的边,如果i和j之间有边则为1,否则为0  
int gn,gm;     //二分图中x和y中点的数目  
int can(int t)  
{  
    int i;  
    for(i=0;i0&&c>0)
            {
                map[b][c]=1;
            }
        }
        printf("%d\n",MaxMatch());
    }
}

 

 

你可能感兴趣的:(hdu-1150 Machine Schedule(二分图,最大匹配,匈牙利算法))