POJ 3216 Repairing Company

id=3216">题目链接

题意:有m项任务,每项任务的起始时间,持续时间,和它所在的block已知,且往返每对相邻block之间的时间也知道,问最少须要多少个工人才干完毕任务,即x最少是多少

思路:先floyd求出每两个block之间的最小距离,然后就是最小路径覆盖问题,一个任务之后能赶到还有一个任务就建边

代码:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. const int N = 25;
  8. const int M = 205;
  9. const int INF = 0x3f3f3f3f;
  10.  
  11. int n, m, q[N][N];
  12. vector<int> g[M];
  13.  
  14. int in[M], s[M], d[M];
  15.  
  16. bool judge(int i, int j) {
  17. return s[i] + d[i] + q[in[i]][in[j]] <= s[j];
  18. }
  19.  
  20. int left[M], vis[M];
  21.  
  22. bool dfs(int u) {
  23. for (int i = 0; i < g[u].size(); i++) {
  24. int v = g[u][i];
  25. if (vis[v]) continue;
  26. vis[v] = 1;
  27. if (left[v] == -1 || dfs(left[v])) {
  28. left[v] = u;
  29. return true;
  30. }
  31. }
  32. return false;
  33. }
  34.  
  35. int hungary() {
  36. int ans = 0;
  37. memset(left, -1, sizeof(left));
  38. for (int i = 0; i < m; i++) {
  39. memset(vis, 0, sizeof(vis));
  40. if (dfs(i)) ans++;
  41. }
  42. return ans;
  43. }
  44.  
  45. int main() {
  46. while (~scanf("%d%d", &n, &m) && n) {
  47. for (int i = 1; i <= n; i++)
  48. for (int j = 1; j <= n; j++) {
  49. scanf("%d", &q[i][j]);
  50. if (q[i][j] == -1) q[i][j] = INF;
  51. }
  52. for (int k = 1; k <= n; k++) {
  53. for (int i = 1; i <= n; i++) {
  54. for (int j = 1; j <= n; j++) {
  55. q[i][j] = min(q[i][j], q[i][k] + q[k][j]);
  56. }
  57. }
  58. }
  59. for (int i = 0; i < m; i++) {
  60. g[i].clear();
  61. scanf("%d%d%d", &in[i], &s[i], &d[i]);
  62. for (int j = 0; j < i; j++) {
  63. if (judge(i, j))
  64. g[i].push_back(j);
  65. if (judge(j, i))
  66. g[j].push_back(i);
  67. }
  68. }
  69. printf("%d\n", m - hungary());
  70. }
  71. return 0;
  72. }

POJ 3216 Repairing Company(最小路径覆盖)的更多相关文章

  1. poj 3216 Repairing Company(最短路Floyd + 最小路径覆盖 + 构图)

    http://poj.org/problem?id=3216 Repairing Company Time Limit: 1000MS   Memory Limit: 131072K Total Su ...

  2. poj 3216 Repairing Company

    http://poj.org/problem?id=3216 n个地点,m个任务 每个任务有工作地点,开始时间,持续时间 最少派多少人可以完成所有的任务 传递闭包之后最小路径覆盖 #include&l ...

  3. POJ 2594 传递闭包的最小路径覆盖

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7171   Accepted: 2 ...

  4. poj 2594 Treasure Exploration(最小路径覆盖+闭包传递)

    http://poj.org/problem?id=2594 Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total ...

  5. poj 3020 Antenna Placement (最小路径覆盖)

    链接:poj 3020 题意:一个矩形中,有n个城市'*'.'o'表示空地,如今这n个城市都要覆盖无线,若放置一个基站, 那么它至多能够覆盖本身和相邻的一个城市,求至少放置多少个基站才干使得全部的城市 ...

  6. POJ 1548 Robots(最小路径覆盖)

    POJ 1548 Robots 题目链接 题意:乍一看还以为是小白上那题dp,事实上不是,就是求一共几个机器人能够覆盖全部路径 思路:最小路径覆盖问题.一个点假设在还有一个点右下方,就建边.然后跑最小 ...

  7. POJ 1422 二分图(最小路径覆盖)

    Air Raid Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7278   Accepted: 4318 Descript ...

  8. POJ 1422 Air Raid (最小路径覆盖)

    题意 给定一个有向图,在这个图上的某些点上放伞兵,可以使伞兵可以走到图上所有的点.且每个点只被一个伞兵走一次.问至少放多少伞兵. 思路 裸的最小路径覆盖. °最小路径覆盖 [路径覆盖]在一个有向图G( ...

  9. POJ 2594 (传递闭包 + 最小路径覆盖)

    题目链接: POJ 2594 题目大意:给你 1~N 个点, M 条有向边.问你最少需要多少个机器人,让它们走完所有节点,不同的机器人可以走过同样的一条路,图保证为 DAG. 很明显是 最小可相交路径 ...

随机推荐

  1. Selenium得到当前页面的URL

    /** * getCurrentURL:(get the current page URL address). * @author huchan * @param driver --- the web ...

  2. 删除sql server用户时报15138错误

    问题 在删除sql server中某数据库下的用户时报15138错误,见下图  解决 可用下述sql代码检查该用户的架构信息,然后逐一修正 SELECT s.name FROM sys.schemas ...

  3. 主成分分析PCA

    PCA(Principal Component Analysis)不仅仅是对高维数据进行降维,更重要的是经过降维去除了噪声,发现了数据中的模式. PCA把原先的n个特征用数目更少的m个特征取代,新特征 ...

  4. Inno Setup入门(五)——添加readme文件

    这个实现起来很简单,就是在[files]段中的某个预先作为readme的文件后面添加标志位isreadme: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TE ...

  5. 查看Win系统激活状态

    Win键+R调出运行框,在运行框中输入cmd slmgr.vbs -dlv winver            回车后就能看到当前系统的版本 slmgr.vbs -dli 显示:操作系统版本.部分产品 ...

  6. win32下编译glog

    既然编译第三方库了,google提供的VSproject是老版本的,构建不好升级.所以还是用cmake是王道. 采用out of source 编译,  以下是编译脚本bat: mkdir build ...

  7. Guice与Spring框架的区别

    2007-4-23  再借斧子的例子说一说spring与guice的区别     看下边对于不同社会形态下一个人(java对象,调用者)需要一把斧子(java对象,被调用者)的例子: (1),原始社会 ...

  8. 我的第一个Raspberry PI装置

    好吧,我先承认是这是从书上学习的第一个示例. 我入手的是Raspberry红版,版本2,看到这么小巧的卡片电脑可以做这么多事情,真是让人惊喜! 安装系统等都很顺利,启动.安装程序.远程桌面.SSH登录 ...

  9. JavaScript 表单验证入门

    JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. 被 JavaScript 验证的这些典型的表单数据有: 用户是否已填写表单 ...

  10. Redis学习之路(007)- Redis学习手册(实例代码)

    在之前的博客中已经非常详细的介绍了Redis的各种操作命令.运行机制和服务器初始化参数配置.本篇博客是该系列博客中的最后一篇,在这里将给出基于Redis客户端组件访问并操作Redis服务器的代码示例. ...