题目链接:点击查看

题目大意:有n个人要坐出租车,每个人上车的时间已知,规定出租车必须在每个人上车之前的一分钟之前到达这个人的位置,之后给出每个人的当前坐标以及需要达到的目的地坐标,行驶完该段路程的时间是两个坐标的曼哈顿距离,现在要求最少的出租车数量,以达到每个乘客的需求都可以得到完成,求出这个最小值

题目分析:很显然,当一个出租车送完一个乘客之后,肯定可以去接送其他乘客,根据送完乘客的位置和下一个乘客的起点来计算一下时间是否足够,若满足时间关系,则可以建边,接下来就是一个求最小路径覆盖的问题了,最小路径覆盖的定义:在一个有向图中,找出最少的路径,使得这些路径,经过每一个点,且每一个点只与一条路径相关联,然后跑一遍匈牙利就出来答案了,不过需要注意一下,这个时候求出的ans并不是最终答案,而是一共有几个客户可以乘坐之前客户用过的车,这样就不用提供新车了,所以答案是n-ans

需要注意的一点是,因为需要建立有向图,所以二重循环遍历的时候,第二重for的起点是i+1,而不是从1开始

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=550;int n;int match[N];bool maze[N][N],vis[N]; struct Node
{int t1,t2,x1,y1,x2,y2;
}a[N];int dis(int x1,int y1,int x2,int y2)
{return abs(x1-x2)+abs(y1-y2);
}bool dfs(int x)
{for(int i=1;i<=n;i++){if(maze[x][i]&&!vis[i]){vis[i]=true;if(!match[i]||dfs(match[i])){match[i]=x;return true;}}}return false;
}void init()
{memset(match,0,sizeof(match));memset(maze,false,sizeof(maze));
}int main()
{
//  freopen("input.txt","r",stdin);
//    ios::sync_with_stdio(false);int w;cin>>w;while(w--){init();scanf("%d",&n);for(int i=1;i<=n;i++){int h,m;scanf("%d:%d%d%d%d%d",&h,&m,&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);a[i].t1=h*60+m;a[i].t2=a[i].t1+dis(a[i].x1,a[i].y1,a[i].x2,a[i].y2);}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(a[i].t2+dis(a[i].x2,a[i].y2,a[j].x1,a[j].y1)<a[j].t1)maze[i][j]=true;}}int ans=0;for(int i=1;i<=n;i++){memset(vis,false,sizeof(vis));if(dfs(i))ans++;}printf("%d\n",n-ans);}return 0;
}

UVALive - 3126 Taxi Cab Scheme(最小路径覆盖-二分图最大匹配)相关推荐

  1. POJ - 2594 Treasure Exploration(最小路径覆盖-二分图最大匹配+传递闭包)

    题目链接:点击查看 题目大意:给出一个有向图,现在需要让最少的机器人沿着图遍历所有点,求出最少需要机器人的数量,注意每个点可以重复遍历 题目分析:因为要遍历所有点,所以还是变成了二分图的最小路径覆盖问 ...

  2. HDU - 1151 Air Raid(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个有向图,现在需要在不同的地方空降伞兵,保证所有伞兵沿着道路可以走完所有城市,求出最少伞兵的数量 题目分析:我们的目的是要用最少的路径覆盖所有顶点,换句话说就是二分 ...

  3. POJ - 3020 Antenna Placement(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,图中'o'代表空地,'*'代表城市,现在需要给城市装无线网,每个无线网最多可以覆盖相邻的两个城市,问覆盖所有的城市最少需要装多少个无线网 题目分析: ...

  4. 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

    在讲述这两个算法之前,首先有几个概念需要明白: 二分图:  二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...

  5. 有向图最小路径覆盖方法浅析、证明 //hdu 3861

    路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联. 对于一个有向无环图怎么求最小路径覆盖? 先构造二分图: 对于原图,先拆点,吧每个点i拆成ii,iii. ...

  6. 二分图专题系列各大知识点总结(匈牙利,染色法,最大独立集,最小点覆盖,最小路径覆盖)

    本文概论 二分图的判断方法:图中不存在奇数环----->染色法判断二分图不存在矛盾 二分图: 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i, ...

  7. POJ1422 最小路径覆盖

    题意:      一个战场,往战场上投放伞兵,每个伞兵不能后退,只能往前走,问你最少多少个伞兵可以吧所有的点都占领. 思路:      这个题是最小路径覆盖,最小路径覆盖 = n - 最大匹配数,首先 ...

  8. 【每日算法】【图论】【最小边覆盖 最小路径覆盖 最小顶点覆盖 最大独立集 最大团】

    最小边覆盖 = 最大独立集 = |V| - 最大匹配数 这个是在原图是二分图上进行的 最小路径覆盖和最小边覆盖不同,不要求给的图是二分图,而是要求是N x N的有向图,不能有环,然后根据原图构造二分图 ...

  9. poj 2594 Treasure Exploration 最小路径覆盖

    题目链接:http://poj.org/problem?id=2594 建图很重要!!! 大致题意: 给出一个由n个顶点m条边组成的有向无环图.求最少可以同时存在多少路径,使得这些路径可以覆盖所有的点 ...

最新文章

  1. 有序单链表的归并算法
  2. 注册表编辑器厘米爱你找不到mysql,win7系统中安装mysql后找不到服务或出现找不到指定文件的解决方法...
  3. Clickhouse Engine kafka 将kafka数据同步clickhouse
  4. ubuntu 安装svn 版本12.04
  5. asp.net 递归删除文件夹及其子文件夹和所有文件[转]
  6. sql server死锁_了解SQL Server中的死锁定义
  7. 阿里员工自愿加班却遭同事骂!网友们炸锅了
  8. python3读取本地_如何使用Python读取本地存储?
  9. C/C++ 安全编码 —— 不安全的函数
  10. IIS5.1安装设置-Sql Sever2008安装设置-移动端设置等必读
  11. RS232 DB9引脚定义
  12. 14万字面试题汇总整理,祝你顺利斩获大厂前端offer
  13. 解决AXURE RP EXTENSION FOR CHROME的快捷方法
  14. C# 合并Excel工作表
  15. 离散信号(八)| 离散傅里叶变换DFT性质(圆周移位、圆周卷积)
  16. window10下搭建php的运行环境
  17. 解决ping得通IP 但是ping 不通域名的问题
  18. 什么是期权期权的简介蕴含着哪些知识
  19. 《计算广告》学习笔记(一)
  20. 选择恐惧症Java?Python?

热门文章

  1. 的源码管理器中有感叹图标_玄说前端面试层层解析—关于 redux 的源码
  2. SpringSecurity分布式整合之验证认证的过滤器
  3. 引入其他配置文件(分模块开发)
  4. SET key value [EX seconds] [PX milliseconds] [NX|XX]
  5. Hive的基本操作-排序
  6. Ant Design入门之介绍
  7. SpringBoot https访问控制
  8. Spring cloud集成Rabbitmq
  9. 201205阶段二FFmpeg编码
  10. 如何将一个文件分割成多个小文件