POJ 1325 Machine Schedule(最小点覆盖)
http://poj.org/problem?id=1325
题意:
对于给定的k个作业,可以在特定模式下的两个机器中的任一个中处理它们中的每一个。例如,作业0可以在机器A在mode_3处理,或者在机器B在mode_4处理,作业1可以在机器A中在mode_2处理,或者在机器B中在mode_4处理, 等等。因此,对于作业i,约束可以表示为三元组(i,x,y),这意味着它可以在mode_x的机器A中或者在mode_y的机器B中被处理。
显然,为了完成所有的工作,我们需要不时地改变机器的工作模式,但不幸的是,机器的工作模式只能通过手动重新启动来改变。通过更改作业的顺序并将每个作业分配给合适的机器,请编写程序以最小化重新启动机器的时间。 机器的工作模式只能通过手动重新启动来更改。通过更改作业的顺序并将每个作业分配给合适的机器,请编写程序以最小化重新启动机器的时间。机器的工作模式只能通过手动重新启动来更改。通过更改作业的顺序并将每个作业分配给合适的机器,请编写程序以最小化重新启动机器的时间。
思路:
建一个二分图,左边为A机器,右边为B机器,把每个作业可选的两个模式连一条边,这道题就是最小点覆盖问题,用最少的点去覆盖所有边。
最小点覆盖=最大匹配。
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std; int g[][];
int vis[];
int match[];
int n, m, k; int dfs(int x)
{
for (int i = ; i < m; i++)
{
if (g[x][i] && !vis[i])
{
vis[i] = ;
if (match[i]==- || dfs(match[i]))
{
match[i] = x;
return ;
}
}
}
return ;
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
int id, a, b;
while (~scanf("%d",&n))
{
if (n == ) break;
scanf("%d%d", &m, &k);
memset(g, , sizeof(g));
memset(match, -, sizeof(match));
for (int i = ; i < k; i++)
{
scanf("%d%d%d", &id, &a, &b);
if (a!= && b!=)
{
g[a][b] = ;
}
}
int ans = ;
for (int i = ; i < n; i++)
{
memset(vis, , sizeof(vis));
if (dfs(i)) ans++;
}
printf("%d\n", ans);
}
return ;
}
POJ 1325 Machine Schedule(最小点覆盖)的更多相关文章
- poj 1325 Machine Schedule 最小点覆盖
题目链接:http://poj.org/problem?id=1325 As we all know, machine scheduling is a very classical problem i ...
- HDU - 1150 POJ - 1325 Machine Schedule 匈牙利算法(最小点覆盖)
Machine Schedule As we all know, machine scheduling is a very classical problem in computer science ...
- POJ - 1325 Machine Schedule 二分图 最小点覆盖
题目大意:有两个机器,A机器有n种工作模式,B机器有m种工作模式,刚開始两个机器都是0模式.假设要切换模式的话,机器就必须的重新启动 有k个任务,每一个任务都能够交给A机器的i模式或者B机器的j模式完 ...
- POJ 1325 Machine Schedule(zoj 1364) 最小覆盖数
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=364 http://poj.org/problem?id=1325 题目大意: ...
- poj 1325 Machine Schedule 二分匹配,可以用最大流来做
题目大意:机器调度问题,同一个任务可以在A,B两台不同的机器上以不同的模式完成.机器的初始模式是mode_0,但从任何模式改变成另一个模式需要重启机器.求完成所有工作所需最少重启次数. ======= ...
- POJ 1325 Machine Schedule——S.B.S.
Machine Schedule Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13731 Accepted: 5873 ...
- poj 1325 Machine Schedule
Time Limit: 1000 MS Memory Limit: 10000 KB 64-bit integer IO format: %I64d , %I64u Java class name ...
- poj 1325 Machine Schedule 题解
Machine Schedule Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14479 Accepted: 6172 ...
- poj 1325 Machine Schedule 解题报告
题目链接:http://poj.org/problem?id=1325 题目意思:有 k 个作业,机器A有 n 个模式:0 ~ n-1,机器B 有 m 个模式:0~ m-1.每一个作业能运行在 A 的 ...
随机推荐
- IOS中使用轻量级数据库
IOS中使用轻量级数据库 目录 概述 IOS中的轻量级数据库 sqlite的方法 数据库的实用操作 第三方类库 FMDatabase 概述 IOS中的轻量级数据库 sqlite的方法 sqlite3 ...
- 纯HTML自动刷新页面或重定向(http-equiv属性的refresh)
refresh 属性值 -- 刷新与跳转(重定向)页面 refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址 refresh示例一:5秒之后刷 ...
- Java中的文件和流相关知识
1. File File类可以使用文件路径字符串来创建File实例,该文件路径可以是绝对路径或相对路径 File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以只列出 ...
- Python爬虫框架Scrapy实例(二)
目标任务:使用Scrapy框架爬取新浪网导航页所有大类.小类.小类里的子链接.以及子链接页面的新闻内容,最后保存到本地. 大类小类如下图所示: 点击国内这个小类,进入页面后效果如下图(部分截图): 查 ...
- Python开发【笔记】:git&github 快速入门
github入门 简介: 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大 ...
- angular自定义指令命名的那个坑
Directive 先从定义一个简单的指令开始. 定义一个指令本质上是在HTML中通过元素.属性.类或注释来添加功能.AngularJS的内置指令都是以ng开头,如果想自定义指令,建议自定义一个前缀代 ...
- Linux下如何执行Shell脚本
Linux下你可以有两种方式执行Shell脚本: 1.用shell程序执行脚本:根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等(一般来说第一行#!/bin/bas ...
- java-基础-【三】try/catch/finally
原文地址: https://my.oschina.net/bieber/blog/703251 一.单层的try/catch public int test(int a,int b){ try{ re ...
- 如何确定Hadoop中map和reduce的个数--map和reduce数量之间的关系是什么?
一般情况下,在输入源是文件的时候,一个task的map数量由splitSize来决定的,那么splitSize是由以下几个来决定的 goalSize = totalSize / mapred.map. ...
- nmon 命令
nmon 命令 用途 以交互方式显示本地系统统计信息并以记录方式记录系统统计信息. 语法 交互方式: nmon [ -h ] nmon [ -s < seconds >] [ -c < ...