uvalive 3126 Taxi Cab Scheme
题意:
有m个人要坐出租车,每个人给出出发时间,出发地点和目的地(以二维坐标表示),两个地点之间所花的时间计算方式是两点之间的哈密顿距离。现在需要排遣车出去,一辆车每次只能装一个人,如果一辆车在装完一个人A之后,再到达另一个人B的出发地点的时间,比这个人的出发时间至少提前1分钟,那么这个车就可以乘坐B。
问排遣的最少的车的数目。
思路:
直观的来看,每一辆车的路径是一个DAG,那么这个问题就转化成了DAG的最小路径覆盖。
最小路径覆盖的定义:在一个有向图中,找出最少的路径,使得途中的所有点都被覆盖,此题所求的最小路径覆盖是不相交的最小路径覆盖。
最小路径覆盖的算法是把每个点拆成起点i和终点i’,如果有一条边从i到j,那么就从i向j’连边,此时这个图就成为了一个二分图。
二分图的最小路径覆盖= 点数 – 二分图的最大匹配
然后此题就是两点之间连边的问题,时间可以换算成分钟数表示比较方便,然后当一个点的结束时间加上 结束点到另一个点的行驶时间,如果这个时间小于另一个点的出发时间,那么这两点之间就可以连边。
匈牙利算法,复杂度O(n^2)。
代码:
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std; const int N = ;
typedef pair<int,int> pii; struct node
{
int st,en; node(int a,int b)
{
st = a;
en = b;
}
}; vector<pii> ps;
vector<node> ns;
vector<int> g[N];
bool vis[N];
int link[N]; int mabs(int x)
{
return x >= ? x : -x;
} bool dfs(int u)
{
for (int i = ;i < g[u].size();i++)
{
int v = g[u][i]; if (!vis[v])
{
vis[v] = ; if (link[v] == - || dfs(link[v]))
{
link[v] = u;
link[u] = v; return true;
}
}
} return false;
} int solve(int n)
{
memset(link,-,sizeof(link)); int res = ; for (int i = ;i < n;i++)
{
if (link[i] == -)
{
memset(vis,,sizeof(vis));
if (dfs(i)) res++;
}
} return res;
} int main()
{
int t; scanf("%d",&t); while (t--)
{
int n; scanf("%d",&n); ns.clear();
ps.clear(); for (int i = ;i < n;i++)
{
g[i].clear();
} for (int i = ;i < n;i++)
{
int a,b;
int x,y,z,w; scanf("%d:%d",&a,&b);
scanf("%d%d%d%d",&x,&y,&z,&w); int st = a * + b;
int en = st + mabs(x - z) + mabs(y - w); ns.push_back(node(st,en));
ps.push_back(pii(x,y));
ps.push_back(pii(z,w));
} for (int i = ;i < n;i++)
{
for (int j = i + ;j < n;j++)
{
pii st = ps[*i + ],en = ps[*j]; int cost = mabs(st.first - en.first) + mabs(st.second - en.second); if (ns[i].en + cost < ns[j].st) g[i].push_back(n+j);
}
} int ans = solve(n); printf("%d\n",n - ans);
} return ;
}
uvalive 3126 Taxi Cab Scheme的更多相关文章
- UVaLive 3126 Taxi Cab Scheme (最小路径覆盖)
题意:有 n 个客人,要从 si 到 ti,每个人有一个出发时间,现在让你安排最少和出租车去接,在接客人时至少要提前一分钟到达客人的出发地点. 析:把每个客人看成一个结点,然后如果用同一个出租车接的话 ...
- Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配
/** 题目:Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配 链接:https://vjudge.net/proble ...
- 【HDU1960】Taxi Cab Scheme(最小路径覆盖)
Taxi Cab Scheme Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- poj 2060 Taxi Cab Scheme (二分匹配)
Taxi Cab Scheme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5710 Accepted: 2393 D ...
- poj 2060 Taxi Cab Scheme (最小路径覆盖)
http://poj.org/problem?id=2060 Taxi Cab Scheme Time Limit: 1000MS Memory Limit: 30000K Total Submi ...
- Taxi Cab Scheme POJ && HDU
Online Judge Problem Set Authors Online Contests User Web Board Home Page F.A.Qs Statistical Charts ...
- 二分图最小路径覆盖--poj2060 Taxi Cab Scheme
Taxi Cab Scheme 时间限制: 1 Sec 内存限制: 64 MB 题目描述 Running a taxi station is not all that simple. Apart f ...
- UVA 1201 - Taxi Cab Scheme(二分图匹配+最小路径覆盖)
UVA 1201 - Taxi Cab Scheme 题目链接 题意:给定一些乘客.每一个乘客须要一个出租车,有一个起始时刻,起点,终点,行走路程为曼哈顿距离,每辆出租车必须在乘客一分钟之前到达.问最 ...
- HDU 1350 Taxi Cab Scheme
Taxi Cab Scheme Time Limit: 10000ms Memory Limit: 32768KB This problem will be judged on HDU. Origin ...
随机推荐
- ini文件读写
//创建对象:iniFile:=TIniFile.Create(strFile); //写入procedure IEAddFavUrl(FURL, Title: string);var fPath: ...
- 20165225 2017-2018-2《Java程序设计》课程总结
20165225 2017-2018-2<Java程序设计>课程总结 - 每周作业链接汇总: 预备作业一:我期待的师生关系 预备作业二:学习基础和C语言基础调查 预备作业三:linux安装 ...
- java 线程 (三)线程并发的安全性 同步代码块
package cn.sasa.demo1; import java.util.concurrent.ExecutionException; public class ThreadDemo { pub ...
- Es6 的类(class)
首先根据es5的类(原型对象)的基本点做参照. 序号 基本点 es5 >es6 1 实例属性(方法) √ √ 2 原型属性(方法) 或 公共属性(方法) √ √ 3 es5的私有变量 或 私有属 ...
- 使用Jersey上传文件
采用jquery.form.js异步上传图片,并结合<form>表单 <script type="text/javascript"> //采用jquery. ...
- HTTP协议属于应用层,而SOCKS协议属于传输层
HTTP协议属于应用层,而SOCKS协议属于传输层 SOCKS代理 SOCKS代理能在任何端口,任何协议下运行. SOCKS V4只支持 TCP连接,而SOCKS V5在其基础上增加了安全认证以及对U ...
- (4.2)mysql备份还原——备份概述
1.什么情况下会用到备份呢? [1.1]灾难恢复 [1.2]单位审计:数据库在过去某一个点是什么样的 [1.3]跨机房灾备:异地备份 [1.4]认为的DDL或者DML语句,导致主从库的数据消失 [1. ...
- 帝国cms搜索关键字调用标签(showsearch)怎么用
前面ytkah介绍了如何让帝国CMS7.2搜索模板支持动态标签调用,现在我们来说说怎么调用帝国cms搜索关键字调用标签(showsearch).在帝国cms后台那边的使用方法:[showsearch] ...
- 以太坊nonce
以太坊系列(ETH&ETC)在发送交易有三个对应的RPC接口,分别是ethsendTransaction.ethsendRawTransaction和personal_sendTransact ...
- (转)Ctrl+H 浪潮Raid配置文档
说明 本手册适用于LSI芯片Raid卡 包括但不限于Inspur 2008/2108 Raid卡.LSI 9240/9260/9261/9271 等Raid卡. 不同型号的Raid卡在某些功能上的支持 ...