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 ...
随机推荐
- win10下切换多个jdk版本
1.每次切换时,修改JAVA_HOME变量 2.编辑path环境变量,如图所示,将%JAVA_HOME%\jre\bin和%JAVA_HOME%\bin移到最上边 3.在控制面板中打开java控制面板 ...
- java 抽象类 abstract
package cn.sasa.com; //抽象类 被abstract修饰的类 public abstract class Animal { //抽象类的成员变量 的定义 与 一般类是一样的 pri ...
- BZOJ1280 Emmy卖猪pigs 网络流
正解:网络流 解题报告: 传送门! 我网络流的基础题都还麻油做完就来做这个了,,,wsl,,, 首先想下最基础的构图方法 不难想到把猪圈和顾客分别当做节点,然后新建一个源点和汇点 然后考虑怎么连边,首 ...
- zabbix server源码安装
一.准备工作 yum -y install net-snmp-devel php-bcmath php-ctype php-xml php-xmlreader php-xmlwriter php-se ...
- maven工程中防止mapper.xml文件被漏掉、未加载的方法
maven工程中防止mapper.xml文件被漏掉.未加载的方法 就是在pom.xml文件中添加以下内容 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --&g ...
- caz,数字证书,公钥
如何有效检查证书有效性? https://www.jianshu.com/p/f4a37da10c53 自签名的https证书是不安全的 https://www.cnblogs.com/liyy201 ...
- MySQL 从库down机
MySQL 从库down机中午突然down机,重启后,从库同步报主键重复的错误. Could not execute Write_rows event on table operation_maste ...
- 008-ThreadLocal原理分析
一.简介 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程 ...
- sqlite基本操作
sqlite准备步骤; .下载:https://www.sqlite.org/download.html: sqlite-dll-win64-3250200.zip 和 sqlite-tools-wi ...
- spring boot 使用视图modelandview
1:springboot使用视图解析器,添加依赖 <!-- freemarker模板引擎视图 --> <dependency> <groupId>org.sprin ...