对于什么是DAG最小路径覆盖以及解题方法在我的另外的博客已经有了。http://www.cnblogs.com/Potato-lover/p/3980470.html

  此题的题意:

    公交车(出租车)车站有一个固定的发车时间,有二维起点和终点,花费的时间是两点的曼哈顿距离,即|x1-x2| + |y1-y2| 。问最少需要多少辆车才能跑完所有路线。

  思路:

    A站点发车时间如果大于车到达B站点的时间与车从B站点到达A站点的时间,就可以连边。然后求最大匹配。最小路径覆盖 = 顶点数 -  最大匹配

    有个小地方要注意,上面说的“大于”,那么等于可不可以呢?按样例2,等于是不可以的。  

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=,INF=0x3f3f3f3f;
int bmap[N][N],cx[N],cy[N],dx[N],dy[N];
bool bmask[N];
int nx,ny,dis,ans;
bool searchpath()
{
queue<int> q;
dis=INF;
memset(dx,-,sizeof(dx));
memset(dy,-,sizeof(dy));
for(int i=;i<=nx;i++)
{
if(cx[i]==-){ q.push(i); dx[i]=; }
while(!q.empty())
{
int u=q.front(); q.pop();
if(dx[u]>dis) break;
for(int v=;v<=ny;v++)
{
if(bmap[u][v]&&dy[v]==-)
{
dy[v]= dx[u] + ;
if(cy[v]==-) dis=dy[v];
else
{
dx[cy[v]]= dy[v]+;
q.push(cy[v]);
}
}
}
}
}
return dis!=INF;
}
int findpath(int u)
{
for(int v=;v<=ny;v++)
{
if(!bmask[v]&&bmap[u][v]&&dy[v]==dx[u]+)
{
bmask[v]=;
if(cy[v]!=-&&dy[v]==dis) continue;
if(cy[v]==-||findpath(cy[v]))
{
cy[v]=u; cx[u]=v;
return ;
}
}
}
return ;
}
void maxmatch()
{
ans=;
memset(cx,-,sizeof(cx));
memset(cy,-,sizeof(cy));
while(searchpath())
{
memset(bmask,,sizeof(bmask));
for(int i=;i<=nx;i++)
if(cx[i]==-) ans+=findpath(i);
}
}
void init()
{
memset(bmap,,sizeof(bmap));
}
struct node
{
int x,y,a,b,s,t;
}e[N];
int main()
{
//freopen("test.txt","r",stdin);
int i,j,k,n,cas,s,t,a,b;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
init();
for(i=;i<=n;i++){
scanf("%d:%d",&a,&b);
e[i].s=a*+b;
scanf("%d%d%d%d",&e[i].x,&e[i].y,&e[i].a,&e[i].b);
e[i].t= e[i].s+abs(e[i].a +-e[i].x)+abs(e[i].b-e[i].y);
}
for(i=;i<=n;i++){
for(j=;j<=n;j++){
if(i==j) continue;
t=abs(e[j].x-e[i].a)+abs(e[j].y-e[i].b);
if(e[j].s>e[i].t+t) bmap[i][j]=;
t=abs(e[i].x-e[j].a)+abs(e[i].y-e[j].b);
if(e[i].s>e[j].t+t) bmap[j][i]=;
}
}
nx=ny=n;
maxmatch();
printf("%d\n",n-ans);
}
return ;
}

最新文章

  1. PHP 适配器模式
  2. OC基础--Property
  3. 如何搭建 node,react 开发环境
  4. tp中附件上传文件,表单提交
  5. SQL疑难杂症【1】解决SQL2008 RESTORE 失败问题
  6. [Interview][CodingExam]
  7. iOS: Core Data入门
  8. Javascript触屏手势库-JTouch(更新V1.1)
  9. sql基础之DDL(Data Definition Languages)
  10. SQL Server 连接问题-命名管道
  11. String不变性
  12. jquery_mobile事件
  13. 使用OGG添加唯一标识字段到目标表
  14. 扒一扒.net、.net framework、mono和Unity
  15. 我为什么推荐Prettier来统一代码风格
  16. 快速搭建springboot框架以及整合ssm+shiro+安装Rabbitmq和Erlang、Mysql下载与配置
  17. SharePoint 2013 基于表单 Membership 的身份验证
  18. C语言 &#183; 企业奖金发放
  19. calculate MAC,Lisence,Checksum and generate muti-file
  20. 20165333 2016-2017-2 《Java程序设计》第1周学习总结

热门文章

  1. Android LinearLayout整个布局设置不可点击
  2. 以豌豆荚为例,用 Scrapy 爬取分类多级页面
  3. 05.Python高级编程
  4. lua返回页面时中文乱码
  5. 2.SpringBoot的properties的属性配置详解
  6. MongoDB简介、特点、原理、使用场景、应用案例
  7. hdu 4612 双联通缩点+树形dp
  8. SSL延迟
  9. 洛谷——P2038 无线网络发射器选址
  10. Jackson 过滤属性