Machine Schedule --- 二分匹配 匈牙利算法 记录

这是一个关于计算机科学中的机器调度问题,具体为2机调度模型,每台机器有多种工作模式,并且需要手动重启来改变模式。给定一定数量的作业,每个作业可以在两台机器的不同模式下完成。目标是最小化重新启动机器的次数。程序通过匈牙利算法求解匹配,以实现最小顶点覆盖,从而找出最优解决方案。
摘要由CSDN通过智能技术生成

问题描述
众所周知,机器调度是计算机科学中一个非常经典的问题,研究历史非常悠久。调度问题在必须满足的约束的性质和所需的调度类型方面存在很大差异。这里我们考虑一个 2 机调度问题。
有两台机器A和B。机器A有n种工作模式,称为mode_0,mode_1,…,mode_n-1,同样机器B有m种工作模式,mode_0,mode_1,…,mode_m-1。一开始他们都在mode_0工作。
对于给定的 k 个作业,它们中的每一个都可以在两台机器中的任何一台上以特定模式处理。例如,作业 0 可以在机器 A 的 mode_3 或机器 B 的 mode_4 处理,作业 1 可以在机器 A 的 mode_2 或机器 B 的 mode_4 处理,依此类推。因此,对于作业 i,约束可以表示为三元组 (i, x, y),这意味着它可以在机器 A 的 mode_x 或机器 B 的 mode_y 中处理。
显然,要完成所有的工作,我们需要不时改变机器的工作模式,但不幸的是,机器的工作模式只能通过手动重启来改变。通过更改作业的顺序并将每个作业分配给合适的机器,请编写程序以最大限度地减少重新启动机器的时间。

输入
该程序的输入文件包含几个配置。一个配置的第一行包含三个正整数:n、m (n, m < 100) 和 k (k < 1000)。下面的 k 行给出了 k 个作业的约束,每行是一个三元组:i, x, y。
输入将由包含单个零的行终止。

输出
输出应该是每行一个整数,这意味着重新启动机器的最少次数。

样本输入
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

样本输出
3

题意,例如,左侧为A, 右侧为B,机器初始状态为A0,B0。以样例进行说明
A0转换到A1,启动一次,进行4个作业
A1转换到A2,又启动一次,进行4个作业
B0转换到B3,又启动一次,进行2个作业
所有作业完成,共启动3次。即
求最小顶点覆盖数 = 匹配数
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

int n, m, k, id, x, y, ans;
int g[105][
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值