设为首页 加入收藏

TOP

ZOJ 2027 Travelling Fee
2015-07-20 18:05:56 来源: 作者: 【 】 浏览:3
Tags:ZOJ 2027 Travelling Fee

枚举+最短路


题意是说出发地 和 目的地 之间有一条边是免费的。问你最小费用。


误区:求出最短路-路径中的最大边。(有些其他边免费之后,可能最短路就变了)


正确思路:枚举每条边,将其费用设为0.然后求最短路。找费用最小。


这是无向图,至于地名可以用map映射。


#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
        #include
        
          #include
         
           #include
          
            #include
           
             #include
            
              #define INF 0x7fffffff #define eps 1e-6 #define LL long long using namespace std; int n,m; map
             
              city; struct lx { int v,len; }; vector
              
               g[501]; int x,y,ans; struct edge { int u,v; }; void SPFA(edge flag) { queue
               
                q; bool vis[501]; int dis[501]; for(int i=0; i<501; i++) dis[i]=INF,vis[i]=0; dis[x]=0; vis[x]=1; q.push(x); while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; for(int j=0; j
                
                 dis[u]+len) { dis[v]=dis[u]+len; if(!vis[v]) { vis[v]=1; q.push(v); } } } } ans=min(ans,dis[y]); } int main() { char a[11],b[11]; while(scanf("%s%s",a,b)!=EOF) { city.clear(); for(int i=0; i<501; i++) g[i].clear(); int u,v,len,cot=1; x=city[a]; if(x==0) { city[a]=cot++; x=cot-1; } y=city[b]; if(y==0) { city[b]=cot++; y=cot-1; } scanf("%d",&m); queue
                 
                  que; for(int i=0; i
                  
                   

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu 1171 Big Event in HDU 下一篇杭电 2034 人见人爱A-B

评论

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