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:\n%d\n\n",zz++,dis[n]);
   }
}

猜你喜欢

转载自www.cnblogs.com/DyLoder/p/9827526.html