题目大意:

有n个出车安排,一辆车能接到这个安排的条件是:1、这辆车第一次发车;2、这辆车接了上一个安排,回到这个安排的起点的时间正好是这个安排的前一分钟或者更早

解题报告:

建图然后跑最小路径覆盖。就是答案。注意搭边的条件不是光看距离,还要加上每个任务的起点到终点的时间。

AC代码:(116ms)

#include<bits/stdc++.h>using namespace std;
int n;
int a,b;
int line[1005][1005];
int nxt[1005];
bool used[1005];
struct Node {int x[3],y[3];int time;int dis;
} node[10005];
bool find(int x) {for(int i = 1; i<=n; i++) {if(line[x][i] == 1 && used[i] == 0) {used[i]=1;if(nxt[i] == 0 || find(nxt[i])) {nxt[i]=x;return 1;}}}return 0;
}
int main()
{int t;cin>>t;while(t--) {scanf("%d",&n);memset(line,0,sizeof line);memset(nxt,0,sizeof nxt);for(int i = 1; i<=n; i++) {scanf("%d:%d %d %d %d %d",&a,&b,&node[i].x[0],&node[i].y[0],&node[i].x[1],&node[i].y[1]);node[i].time = a*60+b;node[i].dis = abs(node[i].x[0]-node[i].x[1]) + abs(node[i].y[0] - node[i].y[1]);}for(int i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {//或者j=i+1都可以acif(node[i].dis + node[i].time + abs(node[j].x[0]-node[i].x[1]) + abs(node[j].y[0] - node[i].y[1]) < node[j].time) {line[i][j] = 1;}}}int ans = 0;for(int i = 1; i<=n; i++) {memset(used,0,sizeof used);if(find(i)) ans++;}printf("%d\n",n-ans);}return 0 ;
}

AC代码2:(26ms)

//邻接表会快多少?
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <vector>
using namespace std;const int N = 505;int t, n;struct People {int s, x1, y1, x2, y2;void read() {int h, m;scanf("%d:%d%d%d%d%d", &h, &m, &x1, &y1, &x2, &y2);s = h * 60 + m;}bool operator < (const People& c) const {return s < c.s;}
} p[N];vector<int> g[N];bool judge(People a, People b) {int tmp = a.s + abs(a.x2 - a.x1) + abs(a.y2 - a.y1) + abs(a.x2 - b.x1) + abs(a.y2 - b.y1);if (tmp < b.s) return true;return false;
}int match[N], vis[N];bool dfs(int u) {for (int i = 0; i < g[u].size(); i++) {int v = g[u][i];if (vis[v]) continue;vis[v] = 1;if (match[v] == -1 || dfs(match[v])) {match[v] = u;return true;}}return false;
}int hungary() {int ans = 0;memset(match, -1, sizeof(match));for (int i = 0; i < n; i++) {memset(vis, 0, sizeof(vis));if (dfs(i)) ans++;}return ans;
}int main() {scanf("%d", &t);while (t--) {scanf("%d", &n);for (int i = 0; i < n; i++) {g[i].clear();p[i].read();}sort(p, p + n);for (int i = 0; i < n; i++)for (int j = i + 1; j < n; j++) {if (judge(p[i], p[j]))g[i].push_back(j);}printf("%d\n", n - hungary());}return 0;
}

总结:

想想为什么 j=1或者j=i+1都可以AC????

20190504:因为你sort了,,这样j=1~i这一部分都没必要遍历了,因为肯定不符合题意。

【UVALive - 3126】Taxi Cab Scheme (二分图,最小路径覆盖)相关推荐

  1. 1350 Taxi Cab Scheme DAG最小路径覆盖

    对于什么是DAG最小路径覆盖以及解题方法在我的另外的博客已经有了.http://www.cnblogs.com/Potato-lover/p/3980470.html 此题的题意: 公交车(出租车)车 ...

  2. UVALive - 3126 Taxi Cab Scheme(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:有n个人要坐出租车,每个人上车的时间已知,规定出租车必须在每个人上车之前的一分钟之前到达这个人的位置,之后给出每个人的当前坐标以及需要达到的目的地坐标,行驶完该段路程的时 ...

  3. 洛谷 - P2764 最小路径覆盖问题(最大流+二分图最小路径覆盖+路径打印)

    题目链接:点击查看 题目大意:给出一个由n个点和m条边组成的有向无环图,现在需要我们求最少可以将n个点分为多少条简单路径,并打印出每一条路径 题目分析:题意挺难懂的..简单来说就是让求二分图最小路径覆 ...

  4. POJ 3216 Repairing Company【二分图最小路径覆盖】

    题意: 告诉你 Q 格街区,一共有 M d 个任务分布在这Q 个街区里面,知道了每个任务的开始时间和需要一个人的完成时间,   问最少需要派多少人才能做完所有的任务. 分析: 求二分图的最小路径覆盖, ...

  5. CodeForcesGym 100753B Bounty Hunter II 二分图最小路径覆盖

    关键在建图 题解:http://www.cnblogs.com/crackpotisback/p/4856159.html 学习:http://www.cnblogs.com/jackiesteed/ ...

  6. POJ3020深度解析(二分图--最小路径覆盖)

    题目:Antenna Placement 题意: 一个矩形中,有N个城市'*',现在这n个城市都要覆盖无线,若放置一个基站,那么它至多可以覆盖相邻的两个城市. 问至少放置多少个基站才能使得所有的城市都 ...

  7. 二分图大讲堂——彻底搞定最大匹配数(最小覆盖数)、最大独立数、最小路径覆盖、带权最优匹配

    二分图匹配 二分图大讲堂--彻底搞定最大匹配数(最小覆盖数).最大独立数.最小路径覆盖.带权最优匹配(转) 文本内容框架: §1图论点.边集和二分图的相关概念和性质 §2二分图最大匹配求解 匈牙利算法 ...

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

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

  9. DAG的最小路径覆盖和二分图的最大匹配

    DAG的最小路径覆盖和二分图的最大匹配 DAG的最小路径覆盖是指找最小数目的互相不相交的有向路径,满足DAG的所有顶点都被覆盖. 首先给出公式:DAG的最小路径覆盖数=DAG图中的节点数-相应二分图中 ...

最新文章

  1. Java程序员从笨鸟到菜鸟之(八十)细谈Spring(九)spring+hibernate声明式事务管理详解
  2. ESD二极管 DW15D3HP-S 封装SOD-323F
  3. 工业机器人工具中心点标定的意义_如何理解工业机器人的工具中心点
  4. 钉钉微应用怎么进入_钉钉微应用如何打开本地app (Android)-问答-阿里云开发者社区-阿里云...
  5. 基于JAVA+Servlet+JSP+MYSQL的幼儿园管理系统
  6. php double 类型 浮点数相减
  7. CCS3.3之DM642开发环境建立
  8. Github大盘点!2021年最惊艳的38篇AI论文
  9. windowns定时关机命令
  10. Python数学建模入门【3】
  11. 模仿 alexa 工具条
  12. 用74ls90组成二十四进制计数器_89c52定时计数器T2
  13. 程序员复试都准备什么_考研复试一般能过吗 主要都考什么
  14. pdf加水印的方法,pdf如何加水印?
  15. paip 破解网站手机验证码
  16. 方舟生存进化服务器存档位置,方舟生存进化怎么转移存档
  17. 解决nf_conntrack: table full, dropping packet
  18. 各种浏览器兼容性报告大全
  19. matlab 三角函数 和差化积,三角函数中的和差化积公式编辑方法
  20. 华东理工大学计算机学院考研考什么,华东理工大学计算机专业基础综合2020考研考试大纲...

热门文章

  1. nlp中的经典模型(三)
  2. [Bugku][Crypto][CTF][2020]Crypto 1-20 write up
  3. [Leetcode][第733题][JAVA][图像渲染][BFS][DFS]
  4. fir滤波器算法c语言程序,FIR滤波器设计C语言程序
  5. python实现决策树数据直接赋值导入_决策树在python中的数据实现
  6. html文档php 取mac地址_cpu序列号_硬盘序列号,用vbs脚本获取网卡MAC,CPUID,硬盘序列号的实现代码...
  7. linux远程虚拟桌面,2020-07-23 Linux 远程连接虚拟桌面
  8. oracle数据库的浮点数,Oracle Float类型
  9. Linux 信号signal处理函数
  10. 学习linux/unix编程方法的建议[转]