这道题考察对最小点覆盖的理解。

做法:

对于一个作业,它需要A的a模式和B的b模式,那么可以从a模式向b模式连一条边;可以感性的理解为每一条边就是一个作业,需要求得有多少个模式可以覆盖所有的边,也就是最小点覆盖,也就是最大匹配。

注意 :

由于A,B的机器初始模式为0,那么所有的可以用模式0完成的工作都可以不用更换模式而完成!所以我们只需要考虑完成模式不包含0的作业。

AC代码:

 #include <vector>
#include <cstdio>
#include <cstring> const int N = + ; std :: vector < int > g [ N ] ;
int link [ N ] , n , k , m , ans , x , a , b ;
bool vis [ N ] ; void create ( int u , int v ) {
g [ u ] . push_back ( v ) ;
} bool find ( int x ) {
int v ;
for ( int i = ; i < g [ x ] . size ( ) ; i ++ ) {
v = g [ x ] [ i ] ;
if ( ! vis [ v ] ) {
vis [ v ] = true ;
if ( ( ! link [ v ] ) || find ( link [ v ] ) ) {
link [ v ] = x ;
return true ;
}
}
}
return false ;
} void init ( ) {
memset ( link , , sizeof ( link ) ) ;
ans = ;
} int main ( ) { // 待调试
while ( ) {
scanf ( "%d" , & n ) ;
if ( n == ) return ;
scanf ( "%d%d" , & m , & k ) ;
init ( ) ;
// A : 1 ~ n ;
// B : n + 1 ~ n + m ;
for ( int i = ; i <= k ; i ++ ) {
scanf ( "%d%d%d" , & x , & a , & b ) ;
if ( a * b != ) create ( a , b + n ) ;
}
for ( int i = ; i <= n ; i ++ ) {
memset ( vis , false , sizeof ( vis ) ) ;
if ( find ( i ) )
ans ++ ;
}
printf ( "%d\n" , ans ) ;
for ( int i = ; i <= n + m ; i ++ )
g [ i ] . clear ( ) ;
}
}

AC

POJ 1235 Machine Schedule 【二分图】的更多相关文章

  1. POJ - 1325 Machine Schedule 二分图 最小点覆盖

    题目大意:有两个机器,A机器有n种工作模式,B机器有m种工作模式,刚開始两个机器都是0模式.假设要切换模式的话,机器就必须的重新启动 有k个任务,每一个任务都能够交给A机器的i模式或者B机器的j模式完 ...

  2. POJ 1325 Machine Schedule——S.B.S.

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13731   Accepted: 5873 ...

  3. poj 1325 Machine Schedule 二分匹配,可以用最大流来做

    题目大意:机器调度问题,同一个任务可以在A,B两台不同的机器上以不同的模式完成.机器的初始模式是mode_0,但从任何模式改变成另一个模式需要重启机器.求完成所有工作所需最少重启次数. ======= ...

  4. poj 1325 Machine Schedule 题解

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14479   Accepted: 6172 ...

  5. ZOJ 1364 Machine Schedule(二分图最大匹配)

    题意 机器调度问题 有两个机器A,B A有n种工作模式0...n-1 B有m种工作模式0...m-1 然后又k个任务要做 每一个任务能够用A机器的模式i或b机器的模式j来完毕 机器開始都处于模式0 每 ...

  6. HDU - 1150 POJ - 1325 Machine Schedule 匈牙利算法(最小点覆盖)

    Machine Schedule As we all know, machine scheduling is a very classical problem in computer science ...

  7. poj 1325 Machine Schedule 最小点覆盖

    题目链接:http://poj.org/problem?id=1325 As we all know, machine scheduling is a very classical problem i ...

  8. poj 1325 Machine Schedule

    Time Limit: 1000 MS Memory Limit: 10000 KB 64-bit integer IO format: %I64d , %I64u   Java class name ...

  9. HDU1150 Machine Schedule(二分图最大匹配、最小点覆盖)

    As we all know, machine scheduling is a very classical problem in computer science and has been stud ...

随机推荐

  1. 大O表示法

    概念 大O表示法是和数据项的个数相关联的粗略度量算法时间复杂度的快捷方法. 常数一个无序可重复数组插入一个数据项的时间T是常数K,常数K表示一次插入所花费的时间,包含cpu.编译器等工作时间.可表示为 ...

  2. Pig load 用法举例

    users = load '/users.data' using PigStorage() as (name:chararray, age:int, address:chararray);   loa ...

  3. Promise 初步

    在JavaScript的世界中,所有代码都是单线程执行的. 由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行.异步执行可以用回调函数实现: function ca ...

  4. 【Java】操作Sqlite数据库

    首先在https://github.com/xerial/sqlite-jdbc下载jar包 import java.sql.Connection; import java.sql.DriverMan ...

  5. 读书笔记week1——涂涵越

    这次读书笔记主要是就<程序员修炼之道>这本书的前半部分做一些总结以及发表一些自己的看法. 本书前面的一部分主要是一些程序员应该在工作中时刻注意的事情,一些关键的信息如下: 1.处理问题的态 ...

  6. git repo代码部署策略及工具

    一般在项目或者产品开发流程中,先是开发人员在本地做好开发及测试,其中可能包含很多用于测试用的目录以及源代码文件,在部署前往往会有一个build过程.web项目最终build产生出优化生产环境下减少ht ...

  7. 关于Entity Framework更新的几种方式以及可能遇到的问题(附加类型“Model”的实体失败,因为相同类型的其他实体已具有相同的主键值)在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为

    在日常使用Entity Framework中,数据更新通常会用到.下面就简单封装了一个DBContext类 public partial class EFContext<T> : DbCo ...

  8. 用path动画绘制水波纹

    用path动画绘制水波纹 效果 源码 // // ViewController.m // PathAnimation // // Created by YouXianMing on 15/7/3. / ...

  9. 高级IO

    # 高级IO 特殊的IO操作,包括文件锁.系统V的流.信号驱动的I/O.多路转I/O(select和pull函数).readv和writev函数以及存贮映射I/O等概念和函数. ## 文件锁 文件锁是 ...

  10. 单纯形算法 matlab

    %单纯形 %目标函数标准化 % min x1-3x2+2x3 %输入参量 N=[3 -1 2;-2 4 0;-4 3 8]; B=eye(3); A=[N B]; cn=[1;-3;2]; cb=ze ...