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]);
   }
}

 

全部评论

相关推荐

弦五Strings:他之所以会举报你代课是因为在这种人眼里正常上课就是正义代课就是邪恶,典型二极管思维,处理方法就是私下沟通,你就说你自己家里经济困难或者家里父母生病什么之类的,需要去打工挣钱,用尽孝的正义对冲他认为的上课的正义,他可能就妥协了。
我的实习日记
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 14:10
啊啊啊啊好幸福,妈妈是我找工作发疯前的一束光
黑皮白袜臭脚体育生:看了这篇帖子之后已经第一百次质问老妈,仍然没有得到我的老妈是老板的回答
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务