zoukankan      html  css  js  c++  java
  • POJ--1797 Heavy Transportation (最短路)

    题目电波: POJ--1797 Heavy Transportation 

    n点m条边, 求1到n最短边最大的路径的最短边长度 
    改进dijikstra,dist[i]数组保存源点到i点的最短边最大的路径的最短边长度

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<stdio.h>
    using namespace std;
    #define maxn 100010
    #define inf 0x3f3f3f3f
    struct ac{
      int x,y;
      ac(){}
      ac(int a,int b){
        x=a,y=b;
      }
    }a[maxn];
    struct wa{
      int to,va,nex;
    }eg[maxn];
    int dis[maxn],head[maxn];
    bool fa[maxn];
    int n,m,tot,len;
    void init(){
       memset(head,-1,sizeof(head));
       memset(eg,0,sizeof(eg));
       memset(fa,0,sizeof(fa));
       tot=0,len=0;
    }
    void add_eg(int u,int v,int va){
       eg[tot].to=v;
       eg[tot].va=va;
       eg[tot].nex=head[u];
       head[u]=tot++;
    
       eg[tot].to=u;
       eg[tot].va=va;
       eg[tot].nex=head[v];
       head[v]=tot++;
    }
    bool xxx(ac q,ac w){
      if(q.x>w.x) return 1;
      return 0;
    }
    void add(int v){
        if(v==1) return ;
        if(xxx(a[v],a[v/2])){
           swap(a[v],a[v/2]);
           add(v/2);
        }
    }
    void updata(int v){
       if(v*2>len) return ;
       if(v*2==len){
          if(xxx(a[v*2],a[v])) swap(a[v],a[v*2]);
          return ;
       }
       if(xxx(a[v],a[v*2])&&xxx(a[v],a[v*2+1])) return ;
       if(xxx(a[v*2],a[v*2+1])){
          swap(a[v*2],a[v]);
          updata(v*2);
       }else{
          swap(a[v*2+1],a[v]);
          updata(v*2+1);
       }
    }
    void dijstra(){
       memset(dis,0,sizeof(dis));
       memset(fa,0,sizeof(fa));
       dis[1]=inf;
       a[++len]=ac(inf,1);
       while(len){
          ac x=a[1];
          int u=x.y;
          swap(a[1],a[len--]),updata(1);
          if(fa[u]) continue;
          fa[u]=1;
          for(int j=head[u];j!=-1;j=eg[j].nex){
             int v=eg[j].to;
             int va=eg[j].va;
             if(dis[v]<min(dis[u],va)){
                dis[v]=min(dis[u],va);
                a[++len]=ac(dis[v],v);
                add(len);
             }
          }
       }
    }
    int main(){
       int t,zz=1;
       cin>>t;
       while(t--){
         cin>>n>>m;
         init();
         for(int j=0;j<m;j++){
            int u,v,va;
             scanf("%d%d%d",&u,&v,&va);
            add_eg(u,v,va);
         }
         dijstra();
         printf("Scenario #%d:
    %d
    
    ",zz++,dis[n]);
       }
    }
  • 相关阅读:
    Beginning Auto Layout Tutorial in iOS 7: Part 2
    Beginning Auto Layout Tutorial in iOS 7: Part 1
    Autolayout 03
    Autolayout 02
    Autolayout 01
    Start Developing iOS Apps Today
    Spring 7大功能模块的作用
    struts2入门
    myeclipse导入工程 Some projects cannot be imported because they already exist in the workspace
    第十一章 Servlet MVC模式
  • 原文地址:https://www.cnblogs.com/Dvelpro/p/9827526.html
Copyright © 2011-2022 走看看