题意:

有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的更多相关文章

  1. UVaLive 3126 Taxi Cab Scheme (最小路径覆盖)

    题意:有 n 个客人,要从 si 到 ti,每个人有一个出发时间,现在让你安排最少和出租车去接,在接客人时至少要提前一分钟到达客人的出发地点. 析:把每个客人看成一个结点,然后如果用同一个出租车接的话 ...

  2. Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配

    /** 题目:Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配 链接:https://vjudge.net/proble ...

  3. 【HDU1960】Taxi Cab Scheme(最小路径覆盖)

    Taxi Cab Scheme Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. poj 2060 Taxi Cab Scheme (二分匹配)

    Taxi Cab Scheme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5710   Accepted: 2393 D ...

  5. poj 2060 Taxi Cab Scheme (最小路径覆盖)

    http://poj.org/problem?id=2060 Taxi Cab Scheme Time Limit: 1000MS   Memory Limit: 30000K Total Submi ...

  6. Taxi Cab Scheme POJ && HDU

    Online Judge Problem Set Authors Online Contests User Web Board Home Page F.A.Qs Statistical Charts ...

  7. 二分图最小路径覆盖--poj2060 Taxi Cab Scheme

    Taxi Cab Scheme 时间限制: 1 Sec  内存限制: 64 MB 题目描述 Running a taxi station is not all that simple. Apart f ...

  8. UVA 1201 - Taxi Cab Scheme(二分图匹配+最小路径覆盖)

    UVA 1201 - Taxi Cab Scheme 题目链接 题意:给定一些乘客.每一个乘客须要一个出租车,有一个起始时刻,起点,终点,行走路程为曼哈顿距离,每辆出租车必须在乘客一分钟之前到达.问最 ...

  9. HDU 1350 Taxi Cab Scheme

    Taxi Cab Scheme Time Limit: 10000ms Memory Limit: 32768KB This problem will be judged on HDU. Origin ...

随机推荐

  1. jmeter发送https请求

  2. javascript语法(一) 极客时间

    脚本和模块 javascript有两种源文件,一种叫脚本,一种叫模块.这个区分主要是在ES6引入的,ES5及之前版本只有一种源文件类型(只有脚本). 脚本是可以有浏览器或者node环境引入执行的,而模 ...

  3. StringDemo

    package cn.sasa.demo2; public class StringDemo { public static void main(String[] args) { //String 底 ...

  4. Orchard Core 模块化

    在上一篇文章谈到如何搭好一个基础的Orchard Core项目. 今天要尝试Orchard Core的模块化. 我自己的理解:一个系统可以分成一个个模块,这一个个模块是由一个个类库去实现的. 首先,在 ...

  5. python QT 编程之路

    pyQT4  的Wheel 下载 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4 python发送GET 或者 POST请求 https://www ...

  6. module_init 内核调用过程

    内核版本:linux_2.6.22.6 入口源文件: init.h

  7. 去除字符串中的html代码

    public static String Html2Text(String inputString) { String htmlStr = inputString; // 含html标签的字符串 St ...

  8. 手动建立mapping以及增加属性

    只能创建index时手动建立mapping,或者新增field mapping,但是不能update field mapping 1.手动建立mappingPUT /website{ "ma ...

  9. MongoDB pymongo模块

    安装pymongo模块 pip install pymongo 连接mongodb代码,生成pymongo对象,传入连接服务器相关参数 ip 端口 如果使用指定的账户登录,设置要登录的账户和密码,然后 ...

  10. blockdev命令 blkid命令 lsblk命令

    blockdev命令  blkid命令  lsblk命令 http://www.jb51.net/LINUXjishu/310389.html block相关的命令 这篇文章主要介绍了Linux bl ...