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 ...
随机推荐
- MySQL 数据库登录查询
1. 进入到bin目录: 键入cd..,一直到出现C:\ 为止 然后cd bin所在路径: 如: C:\cd C:\Program Files\MySQL\MySQL Server 5.7 ...
- CF720A Closing ceremony 贪心
正解:贪心 解题报告: 传送门! 先考虑如果只有一列怎么搞?那就肯定是尽量走到最远的地方 然后用点儿类似的思想,现在考虑有两列的情况QAQ 为了方便表述,这里给每个位置两个值,a表示离一号入口的距离, ...
- project proposal写作框架
主要有八个因素: 背景(Your Background):对于proposal有意义的要点,如国家职业证书.技能.经验.能力和实习经历等. 大纲(Outline Proposal):描述你明确的感兴趣 ...
- 1-4-bootloader架构学习
1-4-bootloader架构学习 1.一般情况下嵌入式 Linux 系统中的软件主要分为以下几部分: 1) 引导加载程序:其中包括内部 ROM 中的固化启动代码和 BootLoader 两部分. ...
- docker端口映射或启动容器时报错
原始镜像如下: REPOSITORY TAG IMAGE ID CREATED SIZE xtjatswc/mycore2 v3 73ce3cd97c01 About an hour ago .74G ...
- discuz config_global.php文件设置说明
<?php $_config = array(); // ---------------------------- CONFIG DB ----------------------------- ...
- Java基础知识(JAVA基本数据类型包装类)
基本数据类型的包装类 为什么需要包装类? Java并不是纯面向对象的语言.Java语言是一个面向对象的语言,但是Java的基本数据类型却不是面向对象的.但是我们在实际使用中经常需要将基本数据转化成对象 ...
- 小程序 input 键盘弹出时样式遮盖问题
设置cursor-spacing,具体可参考官方文档,代码如下: <input type='text' bindinput="bindKeyInput" placehold ...
- asxios--form data提交,setcookie
React native 项目,部分接口用form data 提交,以及在Android端,虽然设置了请求携带cookie,但每次请求携带的cookie跟初始化时都不一样,目前做法是去到初始化中返回的 ...
- Echart绘制趋势图和柱状图总结
1.legend名字与series名字一样,即可联动,且不可手动去掉联动效果 2.通过legend图例联动,隐藏绘制图线后,对应( yAxisIndex: 1)坐标y轴如果没有同时设置min和max的 ...