zoukankan      html  css  js  c++  java
  • poj 2060 Taxi Cab Scheme(DAG图的最小路径覆盖)

    题意:

    出租车公司有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-dd);
        }
    }
  • 相关阅读:
    NSURLSession的文件下载
    JSON解析(序列化和反序列化)
    NSURLSession的知识小记
    RunLoop的知识小记
    NSCach 的知识小记
    多图片下载综合案例-磁盘缓存处理
    模仿UIApplication创建单例
    LayoutSubviews的调用
    setValueForKeysWithDictionary的底层实现
    剑指offer 20:顺时针打印矩阵
  • 原文地址:https://www.cnblogs.com/fish7/p/4106998.html
Copyright © 2011-2022 走看看