POJ 2060 最小路径覆盖
2012-09-08 10:02
288 查看
[b]题意:[/b]
给出一个T 代表有T组样例
一个n 代表有n个任务
然后接下来n 个任务 给出出发时间和 出发地点(a, b)以及目的地(c, d) 从出发地到目的地花费时间为 |a - c| + |b - d|
问最少用多少辆车可以完成所有任务
[b]思路:[/b]
根据第 i 个任务结束时间+从第 i 个任务的目的地到 第 j 个任务的出发地 < 第 j 个任务的开始时间
确立这两个任务是否可以连通..如果可以就连线
然后求出最大匹配
任务数 - 最大匹配 = 最短路径覆盖
[b]Tips:[/b]
no tips..
[b]Code:[/b]
View Code
给出一个T 代表有T组样例
一个n 代表有n个任务
然后接下来n 个任务 给出出发时间和 出发地点(a, b)以及目的地(c, d) 从出发地到目的地花费时间为 |a - c| + |b - d|
问最少用多少辆车可以完成所有任务
[b]思路:[/b]
根据第 i 个任务结束时间+从第 i 个任务的目的地到 第 j 个任务的出发地 < 第 j 个任务的开始时间
确立这两个任务是否可以连通..如果可以就连线
然后求出最大匹配
任务数 - 最大匹配 = 最短路径覆盖
[b]Tips:[/b]
no tips..
[b]Code:[/b]
View Code
#include <stdio.h> #include <cstring> #define clr(x) memset(x, 0, sizeof(x)) #define fabs(x) ((x) > 0?(x):-(x)) const int INF = 0x1f1f1f1f; struct Ride { int start; int end; int a, b, c, d; }ride[510]; struct Edge { int next; int to; }edge[1000000]; int tot; int head[510]; void add(int s, int u) { edge[tot].to = u; edge[tot].next = head[s]; head[s] = tot++; } int link[510]; int vis[510]; int sum, n; int dfs(int x) { for(int i = head[x]; i != 0; i = edge[i].next){ int y = edge[i].to; if(!vis[y]){ vis[y] = true; if(link[y] == 0 || dfs(link[y])){ link[y] = x; return true; } } } return false; } void solve() { clr(link); sum = 0; for(int i = 1; i <= n; ++i){ clr(vis); if(dfs(i)) sum++; } } int main() { int i, j, k; int T; int h, m; while(scanf("%d", &T) != EOF) while(T--) { tot = 1; clr(head); scanf("%d", &n); for(i = 1; i <= n; ++i){ scanf("%d:%d %d %d %d %d", &h, &m, &ride[i].a, &ride[i].b, &ride[i].c, &ride[i].d); ride[i].start = h*60+m; ride[i].end = ride[i].start + fabs(ride[i].a-ride[i].c)+fabs(ride[i].b-ride[i].d); } for(i = 1; i <= n; ++i) for(j = 1; j <= n; ++j) if(ride[i].end + fabs(ride[i].c-ride[j].a)+fabs(ride[i].d-ride[j].b) < ride[j].start) add(i, j); solve(); printf("%d\n", n-sum); } return 0; }
相关文章推荐
- POJ:2060-Taxi Cab Scheme(最小路径覆盖)
- POJ 2060 Taxi Cab Scheme【最小路径覆盖】
- Poj-2060 Taxi Cab Scheme 二分图最小路径覆盖
- HDU 1350 & HDU 1960 & POJ 2060 Taxi Cab Scheme【二分图之最小路径覆盖,经典】
- poj 2060(最小路径覆盖)
- POJ2060 Taxi Cab Scheme【二分图最小路径覆盖】
- UVA-1201 - Taxi Cab Scheme(POJ-2060)--DAG的最小路径覆盖
- POJ 2060 (最小路径覆盖)
- POJ 2060 Taxi Cab Scheme DAG最小路径覆盖
- POJ2060-Taxi Cab Scheme (最小路径覆盖)
- poj 2060 Taxi Cab Scheme (最小路径覆盖)
- POJ-2060 Taxi Cab Scheme 最小路径覆盖
- POJ 2060 最小路径覆盖
- poj2060 Taxi Cab Scheme 最小路径覆盖=顶点数-最大匹配数
- POJ 2060 Taxi Cab Scheme【最小路径覆盖】
- POJ 2060 最小覆盖路径
- POJ 2060 Taxi Cab Scheme (最小路径覆盖)
- POJ-2060-Taxi Cab Scheme-最小路径覆盖
- 【最小路径覆盖】POJ 2060
- 二分图最小路径覆盖--poj2060 Taxi Cab Scheme