天天写算法之Machine Schedule

2人阅读 评论(0) 收藏 举报
分类:

这个题目:

有两台机器A和B,A机器有n种工作方式,B机器有m种工作方式。共有k个任务。每个任务恰好在一条机器上运行。
如果任务在A机器上运行,就需要转换为模式Xi,如果在B机器上运行,就需要转换为模式Yi
每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。
请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。

需要注意的是,初始状态都在0节点处,所以这种情况不用考虑。也就是为0的时候,直接跳过就好。
剩下的就变成了最小覆盖问题,最小覆盖=最大匹配,所以还是hungary算法。

代码::
#include<iostream>
#include<string.h>
#include<cstdio>
#define MAX 105
using namespace std;

int n ,m , k;
int Map[MAX][MAX];//两个人是否有关系
bool used[MAX];//是否被访问过
int linker[MAX];//查看被连接的那一个集合是否有男生来连接了。

bool dfs(int a){
    for(int j = 0 ; j < m ; j ++)
    {
        if(!used[j]&&Map[a][j])
        {
            used[j]=1 ;
            if(linker[j]==-1||dfs(linker[j]))
            {
                linker[j]=a;
                return true ;
            }
        }
    }
    return false ;
}

int hungary(){
    int ans = 0 ;
    memset(linker,-1,sizeof(linker));
    for(int i = 0 ; i < n ; i ++)
    {
        memset(used,0,sizeof(used));
        if(dfs(i)) ans+=1;
    }
    return ans ;
}
int main(){
    int i , j ,num,a,b;
    while(scanf("%d",&n)&&n)
    {
        scanf("%d%d",&m,&k);
      memset(Map,0,sizeof(Map));
      for( i = 0 ; i < k ; i ++)
      {
          scanf("%d%d%d",&num,&a,&b);
          if(a&&b)//这个是因为,一开始状态为0,那么就不再考虑这种情况了,不需要变换
          Map[a][b]=1 ;
          //Map[b][a]=1 ;//这里不正确,不能加这个,因为加入1 3 有关系,反过来就成 3  1 有关系,因为是两个不同的机器
      }
      printf("%d\n",hungary());
    }
}

查看评论

POJ 1325 Machine Schedule(二分匹配 最小点覆盖)

POJ 1325 Machine Schedule(二分匹配 最小点覆盖)
  • u012860063
  • u012860063
  • 2014-09-11 15:33:48
  • 1012

hdu1150 Machine Schedule

有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。...
  • a197p
  • a197p
  • 2015-06-16 20:32:48
  • 579

poj1325 - Machine Schedule

想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410                               ...
  • wangjian8006
  • wangjian8006
  • 2012-09-10 15:11:46
  • 1182

Machine Schedule(Tyvj 3240 & POJ 1325)

Machine Schedule解题报告 Tyvj 3240 Poj1325
  • baidu_30446883
  • baidu_30446883
  • 2016-01-25 15:31:05
  • 140

【二分图匹配】poj1325Machine Schedule

http://poj.org/problem?id=1325 题目描述:在机器A,B上共有k个要完成的任务。每个任务在A,B上的运行模式不同。A机器有n种模式,B机器有m种模式,机器的初始模式为0。...
  • cqbztsy
  • cqbztsy
  • 2015-07-27 17:50:08
  • 208

POJ 1325 Machine Schedule (最大二分匹配)

Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9868 ...
  • BehappyXiang
  • BehappyXiang
  • 2013-02-26 14:04:11
  • 197

POJ 1325 Machine Schedule (二分图最小点集覆盖 匈牙利算法)

POJ 1325 Machine Schedule (二分图最小点集覆盖 匈牙利算法)
  • Tc_To_Top
  • Tc_To_Top
  • 2015-06-09 00:52:54
  • 1242

Machine Schedule(最小点覆盖=最大匹配)

Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12012 ...
  • Enjoying_Science
  • Enjoying_Science
  • 2014-11-06 21:07:05
  • 968

HD 1150Machine Schedule

Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others...
  • zxiaopp
  • zxiaopp
  • 2015-07-13 14:34:54
  • 270

POJ1325 Machine Schedule

Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11506 ...
  • u010129448
  • u010129448
  • 2014-07-17 20:14:46
  • 329
    个人资料
    持之以恒
    等级:
    访问量: 1774
    积分: 1120
    排名: 4万+
    文章存档
    最新评论