现在的位置: 首页 > 综合 > 正文

poj 1325 Machine Schedule(匈牙…

2018年03月17日 ⁄ 综合 ⁄ 共 1001字 ⁄ 字号 评论关闭
题意:有两台机器A and B 它们分别有[0,n) and
[0,m)种工作模式,现在K个工作要完成,每个工作能由任一台机器的某个模式完成 刚开始两台机器都工作在0模式(这句话很重要
起看漏了这句 悲剧了一下 = =。。。) 每切换一种模式都要重起机器,现要重新分配K个工作完成顺序,使得机器重起时间最少。

思路:这题很容易想到二分图的最小点覆盖 要注意的一定的是 刚开始两台机器都工作在0模式 说明0模式完成的工作不要时间 所以建图时,把这条边去掉 剩下的就纯粹的模版了

//208K   
47MS
#include <stdio.h>
#include <string.h>
#define M 105

int n,m,k,mat[M][M];
int link[M],vis[M];

bool DFS (int u)
{
    for (int v =
0;v < m;v ++)
       
if (!vis[v]&&mat[u][v])
       
{
           
vis[v] = 1;
           
if (link[v] == -1||DFS(link[v]))
           
{
               
link[v] = u;
               
return true;
           
}
       
}
    return
false;
}
int MaxMatch ()
{
    int u ,res =
0;
    memset
(link,0xff,sizeof(link));
    for (u = 0;u
< n;u ++)
    {
       
memset (vis,0,sizeof(vis));
       
if (DFS(u))
           
res ++;
    }
    return
res;
}
int main ()
{
    int
i,u,v;
    while (scanf
("%d",&n)&&n)
    {
       
scanf ("%d%d",&m,&k);
       
memset (mat,0,sizeof(mat));
       
while (k --)
       
{
           
scanf
("%d%d%d",&i,&u,&v);

           
if (u*v !=
0)       
//0模式不加边
               
mat[u][v] = 1;
       
}
       
printf ("%d\n",MaxMatch());
    }

抱歉!评论已关闭.