poj 2060 Taxi Cab Scheme(DAG图的最小路径覆盖)
2024-08-28 07:44:12
题意:
出租车公司有M个订单。
订单格式: hh:mm a b c d 含义:在hh:mm这个时刻客人将从(a,b)这个位置出发,他(她)要去(c,d)这个位置。
规定1:从(a,b)到(c,d)所花的时间为:abs(a-c)+abs(b-d)。
规定2:一辆出租车如果要接单,必须在客人出发前1分钟(包括)以前接单。
问,最少派出多少辆出租车,可以完成所有任务。
思路:
把每一笔单看成一个点,如果完成第i个单后可以接到第j个单,则 i->j连上线。
则题为:求这个DAG图的最小路径覆盖。
代码: *:记得要初始化!
struct node{
int a,b,c,d,beginTime;
}ride[505]; int T,n;
char s[55];
vector<int> graph[505];
int cx[505],cy[505];
bool bmask[505]; int findPath(int u){
int L=graph[u].size();
rep(i,0,L-1){
int v=graph[u][i];
if(!bmask[v]){
bmask[v]=true;
if(cy[v]==-1||findPath(cy[v])){
cy[v]=u;
cx[u]=v;
return 1;
}
}
}
return 0;
}
int MaxMatch(){
int ans=0;
rep(i,1,n) cx[i]=cy[i]=-1;
rep(i,1,n) if(cx[i]==-1){
mem(bmask,false);
ans+=findPath(i);
}
return ans;
} int ABS(int x,int y){
return abs(x-y);
} int main(){
cin>>T;
while(T--){
scanf("%d",&n);
rep(i,1,n) graph[i].clear();
rep(i,1,n){
int hour,minute;
scanf("%d:%d",&hour,&minute);
scanf("%d%d%d%d",&ride[i].a,&ride[i].b,&ride[i].c,&ride[i].d);
ride[i].beginTime=60*hour+minute;
}
rep(i,1,n) rep(j,i+1,n){
if(ride[i].beginTime+ABS(ride[i].a,ride[i].c)+ABS(ride[i].b,ride[i].d)+
ABS(ride[i].c,ride[j].a)+ABS(ride[i].d,ride[j].b)+1<=ride[j].beginTime) graph[i].push_back(j);
}
int dd=MaxMatch();
printf("%d\n",n-dd);
}
}
最新文章
- TypeError: &#39;bool&#39; object is not callable g.user.is_authenticated()
- html5和css3的常用参考网
- css百宝箱
- Milking Cows
- cJSON 使用笔记
- Banach—steinhaus定理的应用
- [改善Java代码]优先选择线程池
- MYSQL主从同步测试
- yui--datatable 更新table数据
- 解决word启动时报找不到mathpage.wll错误
- MongoDB基础之一:Conetos下安装MongoDB
- Python模块发布
- Android 开发者,如何提升自己的职场竞争力?
- JAVAWEB复习资料-01
- tar结果find打包指定后缀的文件
- C#进阶系列——WebApi 跨域问题解决方案:CORS(转载)
- [CC-MINXOR]XOR Minimization
- bootstrap table表格前台分页,点击tab选项,重新刷新表格
- Learning by doing——百日“扇贝打卡” 历程&;展望
- Python之路 - Socket实现远程执行命令