设为首页 加入收藏

TOP

HDU 2363 Cycling(三)
2012-11-30 12:25:54 来源: 作者: 【 】 浏览:793
Tags:HDU  2363  Cycling

 

    int up;  // 上界

    int low; // 下界

    bool inq[VN];

    struct Edge{

    int v,next;

    int w;

    }E[EN];

    void addEdge(int u,int v,int w){

    E[size].v=v;

    E[size].w=w;

    E[size].next=head[u];

    head[u]=size++;

    }

    int SPFA(int src){

    memset(inq, 0, sizeof(inq));

    for(int i=0; i<=n; ++i)d[i]=INF;

    d[src]=0;

    if(h[src]<low || h[src]>up) return INF;  // 起点不符合条件直接返回INF

    queue<int>q;

    q.push(src);

    while(!q.empty()){

    int u=q.front();  q.pop();

    if(h[u]<low || h[u]>up) continue;  // 排除符合和限制的

    inq[u] = false;

    for(int e=head[u]; e!=-1; e=E[e].next)if(h[E[e].v]>=low&&h[E[e].v]<=up){//有限制

    int tmp=d[u]+E[e].w;

    if(d[E[e].v] > tmp){

    d[E[e].v] = tmp;

    if(!inq[E[e].v]){

    inq[E[e].v]=true;

    q.push(E[e].v);

    }

    }

    }

    }

    return d[n];

    }

    int main(){

    int T, u, v;

    int len, Min, Max;

    scanf("%d",&T);

    while(T--){

    scanf("%d%d",&n,&m);

    size=0;

    memset(head, -1, sizeof(head));

    for(int i=1; i<=n; ++i){

    scanf("%d", &h[i]);

    order[i]=h[i];

    if(h[i]<Min)Min=h[i];

    if(h[i]>Max)Max=h[i];

    }

    for(int i=0; i<m; ++i){

    scanf("%d%d%d",&u,&v,&len);

    addEdge(u,v,len);

    addEdge(v,u,len);

    }

    sort(order+1, order+1+n);

    int left=0, right=Max-Min+1, mid;

    int ans, dif=INF, minlen=INF;

    while(left < right){ // 二分"高度差"

    mid = (left+right)》1;

    bool flag=false;

    for(int i=1; i<=n; ++i){ // 枚举最低海拔

    low=order[i];

    up=order[i]+mid; // 得到海拔上限

    int tmp=SPFA(1);

    if(tmp!=INF){

    flag=true;

    ans=tmp;

    break;

    }

    }

    if(flag){

    right=mid;

    if(mid<dif){

    dif=mid;

    minlen=ans;

    }

    else if(mid==dif && ans<minlen){

    minlen=ans;

    }

    }

    else{

    left=mid+1;

    }

    }

    printf("%d %d\n", dif, minlen);

    }

    return 0;

    }

      

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1690 Bus Sys.. 下一篇C++强制类型转换操作结果的总结

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: