UVA 1201 - Taxi Cab Scheme(二分图匹配+最小路径覆盖)
来源:互联网 发布:北京奥运会体测数据 编辑:程序博客网 时间:2024/05/19 00:49
UVA 1201 - Taxi Cab Scheme
题目链接
题意:给定一些乘客,每个乘客需要一个出租车,有一个起始时刻,起点,终点,行走路程为曼哈顿距离,每辆出租车必须在乘客一分钟之前到达,问最少需要几辆出租车
思路:如果一辆车载完一个乘客a,能去载乘客b,就连一条有向边,这样做完整个图形成一个DAG,然后要求的最少数量就是最小路径覆盖,利用二分图最大匹配去做,把每个点拆成两点,如果有边就连边,做一次最大匹配,n - 最大匹配数就是答案
代码:
#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;}
1 0
- UVA 1201 - Taxi Cab Scheme(二分图匹配+最小路径覆盖)
- Poj-2060 Taxi Cab Scheme 二分图最小路径覆盖
- POJ2060 Taxi Cab Scheme【二分图最小路径覆盖】
- POJ - 2060 Taxi Cab Scheme 二分图 最小路径覆盖
- UVA 1201 Taxi Cab Scheme(最小路径覆盖)
- HDU OJ 1350 Taxi Cab Scheme 【二分图匹配之最小路径覆盖】
- uva 1201 - Taxi Cab Scheme(二分图匹配)
- 杭电 hdu 1350 和 1960 Taxi Cab Scheme (二分匹配 + 最小路径覆盖)
- PKU2060 Taxi Cab Scheme - 最小路径覆盖
- POJ2060 Taxi Cab Scheme [最小路径覆盖]
- hdu1350 Taxi Cab Scheme (最小路径覆盖)
- poj2060 Taxi Cab Scheme 最小路径覆盖
- HDU1350 Taxi Cab Scheme (最小路径覆盖)
- 【二分图+最小路径覆盖+注释】北大 poj 2060 Taxi Cab Scheme
- hdu 1350 Taxi Cab Scheme(二分图最小路径覆盖)
- HDU 1350 & HDU 1960 & POJ 2060 Taxi Cab Scheme【二分图之最小路径覆盖,经典】
- UVa live3126Taxi Cab Scheme(二分最大匹配之最小路径覆盖)
- poj2060 Taxi Cab Scheme 最小路径覆盖=顶点数-最大匹配数
- 1 --> 简单的java程序
- 3.2使用grunt打包源代码
- mysql对binlog的处理
- 3.3后端请求规范
- 寻找直方图中面积最大的矩形
- UVA 1201 - Taxi Cab Scheme(二分图匹配+最小路径覆盖)
- 数据结构-4-Trie树:应用于统计、排序与搜索 原理详解
- C++11 thread::get_id(3)
- JavaWeb学习笔记——jquery中的dom操作
- OSX10.9.3 eclipse关于JAVA版本的问题
- codeHaus XFire实现WebService开发
- ios/iphone NSArray和NSMutableArray的常用方法
- Tuxedo Domain连接不稳定
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性