zoukankan      html  css  js  c++  java
  • HDU 2962 Trucking

    注意是要求最大化高度(运输量),而不是最小化路径长度。

    于是二分高度,判断只走高度不超过\(mid\)的边的情况下,到达终点的最短距离。若不能抵达终点则返回false。

    最后输出答案时要先check()出最优解再输出。

    const int N=1010;
    struct Node
    {
        int v,h,c;
    };
    vector<Node> g[N];
    int dist[N];
    bool vis[N];
    int n,m;
    int st,ed,maxh;
    
    bool check(int mid)
    {
        memset(dist,0x3f,sizeof dist);
        memset(vis,0,sizeof vis);
        priority_queue<PII,vector<PII>,greater<PII> > heap;
        heap.push({0,st});
        dist[st]=0;
    
        while(heap.size())
        {
            int t=heap.top().se;
            heap.pop();
    
            if(vis[t]) continue;
            vis[t]=true;
    
            for(int i=0;i<g[t].size();i++)
            {
                int j=g[t][i].v,h=g[t][i].h,w=g[t][i].c;
                if(h<mid) continue;
                if(dist[j]>dist[t]+w)
                {
                    dist[j]=dist[t]+w;
                    heap.push({dist[j],j});
                }
            }
        }
        return dist[ed]==INF?false:true;
    }
    
    int main()
    {
        int kase=1;
        while(cin>>n>>m)
        {
            if(!n && !m) break;
            
            if(kase != 1) cout<<endl;
            
            printf("Case %d:\n",kase++);
    
            for(int i=1;i<=n;i++) g[i].clear();
    
            while(m--)
            {
                int a,b,h,c;
                cin>>a>>b>>h>>c;
                if(h == -1) h=INF;
                g[a].pb({b,h,c});
                g[b].pb({a,h,c});
            }
    
            cin>>st>>ed>>maxh;
    
            int l=0,r=maxh;
            while(l<r)
            {
                int mid=l+r+1>>1;
                if(check(mid)) l=mid;
                else r=mid-1;
            }
    
            if(l == 0) cout<<"cannot reach destination"<<endl;
            else
            {
                cout<<"maximum height = "<<l<<endl;
                check(l);
                cout<<"length of shortest route = "<<dist[ed]<<endl;
            }
        }
        //system("pause");
    }
    
  • 相关阅读:
    题解 CF700E Cool Slogans
    题解 LOJ2065 「SDOI2016」模式字符串
    以guest账号无密码访问设置
    共享
    计算机的C$共享在哪里
    网卡工作原理
    iperf网络测试
    Jmeter安装与使用(压测)
    压测工具使用(vegeta)
    Alertmanager 安装(k8s报警)
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14164212.html
Copyright © 2011-2022 走看看