IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 1150 Machine Schedule -> 正文阅读

[数据结构与算法]1150 Machine Schedule

题目详情:

Machine Schedule

Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12936????Accepted Submission(s): 6437


?

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
?

Source
Asia 2002, Beijing (Mainland China)
?

Recommend
Ignatius.L
?

题目大意:

两个机器,有多种模式,每个机器都可以重启切换模式,机器默认模式是模式0,现有多种任务,每个任务对应一种模式,问两个机器最少需要重启多少次才可以完成这些任务。

解题思路:

匈牙利算法,此题可以转化成二分图的最大匹配。

AC代码:

#include <iostream>
#include <vector>
#include <cstring>
#define MAX 101
using namespace std;
vector<int> unvisit(MAX, 1); //存放是否访问过
vector<int> bo_f(MAX, -1);   //女生的男朋友
bool dfs(vector<vector<int>> &machine, int b_w, int n, int m){
    for (int i = 0; i < m; ++i){
        if (machine[b_w][i] && unvisit[i]){ //传过来的男生有女朋友且该女生没有访问过
            unvisit[i] = 0;
            if (bo_f[i] == -1 || dfs(machine, bo_f[i], n, m)){ //该女生没有男朋友且dfs后为真
                bo_f[i] = b_w;
                return true;
            }
        }
    }
    return false;
}
int xyl(vector<vector<int>> &machine, int n, int m){
    int s = 0;
    for (int i = 0; i < n; ++i){
        fill(unvisit.begin(), unvisit.end(), 1);
        if (dfs(machine, i, n, m))  ++s;
    }
    return s;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, m, k;
    int i, x, y;
    while (cin >> n && n){
        cin >> m >> k;
        vector<vector<int>> machine(MAX, vector<int>(MAX, 0)); //邻接矩阵
        fill(unvisit.begin(), unvisit.end(), 1);
        fill(bo_f.begin(), bo_f.end(), -1);
        while (k--){
            cin >> i >> x >> y;
            if (x != 0 && y != 0)
                machine[x][y] = 1;
        }
        cout << xyl(machine, n, m) << endl;
    }
    return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 11:06:46  更:2021-09-10 11:08:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 0:40:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码