Position:


List

Description

  我们知道机器调度是计算机科学中一个非常经典的问题。调度问题有很多种,具体条件不同,问题就不同。现在我们要处理的是两个机器的调度问题。

  有两个机器A和B。机器A有n种工作模式,我们称之为mode_0,mode_l,……,mode_n-1。同样,机器B有m种工作模式,我们称之为mode_0,mode_1,……,mode_m-1。初始时,两台机器的工作模式均为mode_0。现在有k个任务,每个工作都可以在两台机器中任意一台的特定的模式下被加工。例如,job0能在机器A的mode_3或机器B的mode_4下被加工,jobl能在机器A的mode_2或机器B的mode_4下被加工,等等。因此,对于任意的jobi,我们可以用三元组(i,x,y)来表示jobi在机器A的mode_x或机器B的mode_y下被加工。

  显然,要完成所有工作,我们需要不时的改变机器的工作模式。但是,改变机器的工作状态就必须重启机器,这是需要代价的。你的任务是,合理的分配任务给适当的机器,使机器的重启次数尽量少。

Input

第一行三个整数n,m(n,m<=100),k(k<6000)。接下来的k行,每行三个整数i,x,y。

Output

只一行一个整数,表示最少的重启次数。

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

Sample Output

3

HINT

30%: n,m<30, k<100

100%: n,m<100,k<10000

Solution

二分图匹配直接上(Dinic||匈牙利)

Analysis:Konig 定理:最大匹配数 = 最小点覆盖数

注意开始机器是开着的,两边都为零,所以连的边都可以去掉

可恶的样例,居然没0,然后rank10->rank22,80分啊!

Code

  1. // <machine.cpp> - Fri Sep 23 08:09:06 2016
  2. // This file is made by YJinpeng,created by XuYike's black technology automatically.
  3. // Copyright (C) 2016 ChangJun High School, Inc.
  4. // I don't know what this program is.
  5. #include <iostream>
  6. #include <vector>
  7. #include <algorithm>
  8. #include <cstring>
  9. #include <cstdio>
  10. #include <cstdlib>
  11. #include <cmath>
  12. #define MOD 1000000007
  13. #define INF 1e9
  14. using namespace std;
  15. typedef long long LL;
  16. const int MAXN=210;
  17. const int MAXM=100010;
  18. inline int max(int &x,int &y) {return x>y?x:y;}
  19. inline int min(int &x,int &y) {return x<y?x:y;}
  20. inline int gi() {
  21. register int w=0,q=0;register char ch=getchar();
  22. while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
  23. if(ch=='-')q=1,ch=getchar();
  24. while(ch>='0'&&ch<='9')w=w*10+ch-'0',ch=getchar();
  25. return q?-w:w;
  26. }
  27. int n,match[MAXN];
  28. vector<int>b[MAXN];bool f[MAXN];
  29. inline void add(int v,int u){
  30. if(!(v&&u))return;//这句话顶80分,坑~
  31. b[u].push_back(v+n);b[v+n].push_back(u);
  32. }
  33. inline bool dfs(register int x){
  34. if(f[x])return 0;
  35. int num=b[x].size();f[x]=true;
  36. for(int i=0;i<num;i++){
  37. int nex=b[x][i];
  38. if(match[nex]==-1||dfs(match[nex])){
  39. match[x]=nex;match[nex]=x;return 1;
  40. }
  41. }
  42. return 0;
  43. }
  44. int main()
  45. {
  46. freopen("machine.in","r",stdin);
  47. freopen("machine.out","w",stdout);
  48. while(n=gi(),n){
  49. int ans=gi(),k=gi();
  50. for(int i=0;i<=ans+n;i++)b[i].clear();
  51. for(int i=1;i<=k;i++)ans=gi(),add(gi(),gi());
  52. for(int i=0;i<MAXN;i++)match[i]=-1;ans=0;
  53. for(int i=0;i<n;i++)
  54. if(match[i]==-1){
  55. memset(f,0,sizeof(f));
  56. if(dfs(i))ans++;
  57. }
  58. printf("%d\n",ans);
  59. }
  60. return 0;
  61. }

【Poj1325】Machine Schedule机器调度的更多相关文章

  1. POJ1325 Machine Schedule 【二分图最小顶点覆盖】

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11958   Accepted: 5094 ...

  2. POJ-1325 Machine Schedule,和3041有着异曲同工之妙,好题!

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K       Description As we all know, machine ...

  3. [poj1325] Machine Schedule (二分图最小点覆盖)

    传送门 Description As we all know, machine scheduling is a very classical problem in computer science a ...

  4. POJ1325 Machine Schedule

    Description As we all know, machine scheduling is a very classical problem in computer science and h ...

  5. POJ-1325 Machine Schedule 二分图匹配 最小点覆盖问题

    POJ-1325 题意: 有两台机器A,B,分别有n,m种模式,初始都在0模式,现在有k项任务,每项任务要求A或者B调到对应的模式才能完成.问最少要给机器A,B调多少次模式可以完成任务. 思路: 相当 ...

  6. POJ1325 Machine Schedule(二分图最小点覆盖集)

    最小点覆盖集就是在一个有向图中选出最少的点集,使其覆盖所有的边. 二分图最小点覆盖集=二分图最大匹配(二分图最大边独立集) 这题A机器的n种模式作为X部的点,B机器的m种模式作为Y部的点: 每个任务就 ...

  7. Machine Schedule poj1325

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17454   Accepted: 7327 ...

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

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

  9. hdu 1150 Machine Schedule 最少点覆盖转化为最大匹配

    Machine Schedule Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

随机推荐

  1. Django - 自定义filter

    自定义filter 自定义filter时,使用装饰器fileter 在html中,使用传参方式为: 参数1|函数名:参数2 并且函数和参数之间,不能有空格,如果有空格,会报错. filter和simp ...

  2. 代码静态分析工具-splint的学习与使用[转]

    代码静态分析工具--splint的学习与使用[转] 引言 最近在项目中使用了静态程序分析工具PC-Lint,体会到它在项目实施中带给开发人员的方便.PC-Lint是一款针对C/C++语言.window ...

  3. 「 Luogu P1850 」 换教室

    解题思路 很明显的是个期望 $dp$. 先前想到 $dp[i][j]$ 表示第决策到第 $i$ 个时间段,已经进行了 $j$ 次申请,然后就没有然后了,因为这根本就没法转移啊,你又不知道前 $i-1$ ...

  4. UVA-1368 DNA Consensus String(思路)

    题目: 链接 题意: 题目虽然比较长,但读完之后题目的思路还是比较容易想出来的. 给出m个长度为n的字符串(只包含‘A’.‘T’.‘G’.‘C’),我们的任务是得出一个字符串,要求这个字符串与给出的m ...

  5. 通过docker-composer启动容器nginx,并完成spring.boot的web站点端口转发

    前面已经讲过2篇基于docker的mysql.redis容器编排并启动.这次将练习下nginx的docker方式的部署,以及通过nginx去代理宿主主机上的Web服务应该怎么配 PS:(这里由于ngi ...

  6. linux怎么查看已装好硬件驱动

    linux系统中的设备驱动是否安装好一般检查几个方面:1.系统日志.嵌入式系统多是直接dmesg一下,看有没有设备关键字相关的出错信息(通用系统可检查/var/log/messages文件).2.已加 ...

  7. 【模板】大数乘法(51nod 1027)

    #include<cstdio> #include<cstring> #include<algorithm> #define LL long long #defin ...

  8. AOP基础

    [Why AOP ?] 1.代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀.每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点. 2.代码分散:以日志需求为例,知识为了 ...

  9. reids桌面管理工具:RedisDesktopManager下载、使用

    概要:一款好用的Redis桌面管理工具,支持命令控制台操作,以及常用,查询key,rename,delete等操作. 下载软件,请点击下面链接,进入下载页,选择对应版本: https://redisd ...

  10. CodeForces 362C

    分析:首先我们要知道调用swap()函数的次数跟什么有关.可以观察发现在Insertion Sort里,当且仅当a[j](j∈[0,i)) > a[i]时会调用一次swap(),也就是说有多少个 ...