zoukankan      html  css  js  c++  java
  • [BZOJ2662][BeiJing wc2012]冻结

    分层图最短路水题。。

    #include <iostream>
    #include <cstdio>
    #include <queue>
    #include <cstring>
    using namespace std;
    int ecnt,head[55],dis[55][55],n,m,k;
    bool vis[55][55];
    struct Edge{int to,nxt,val;}e[2005];
    struct Node{int x,flor;};
    void add(int bg,int ed,int val){e[++ecnt].nxt=head[bg];e[ecnt].to=ed;e[ecnt].val=val;head[bg]=ecnt;}
    void spfa() {
      memset(dis,0x3f,sizeof dis);
      queue<Node>q;
      q.push((Node){1,0});
      dis[1][0]=0;
      vis[1][0]=1;
      while(!q.empty()) {
        Node u=q.front();q.pop();vis[u.x][u.flor]=0;
        for(int i=head[u.x];i;i=e[i].nxt) {
          int v=e[i].to;
          if(dis[v][u.flor]>dis[u.x][u.flor]+e[i].val) {
            dis[v][u.flor]=dis[u.x][u.flor]+e[i].val;
            if(!vis[v][u.flor]) q.push((Node){v,u.flor}),vis[v][u.flor]=1;
          }
          if(dis[v][u.flor+1]>dis[u.x][u.flor]+e[i].val/2&&u.flor<k) {
            dis[v][u.flor+1]=dis[u.x][u.flor]+e[i].val/2;
            if(!vis[v][u.flor+1]) q.push((Node){v,u.flor+1}),vis[v][u.flor+1]=1;
          }
        }
      }
    }
    int main() {
      scanf("%d%d%d",&n,&m,&k);
      for(int i=1,a,b,c;i<=m;i++) {
        scanf("%d%d%d",&a,&b,&c);
        add(a,b,c),add(b,a,c);
      }
      spfa();
      int ans=0x3f3f3f3f;
      for(int i=0;i<=k;i++) ans=min(ans,dis[n][i]);
      printf("%d",ans);
    }
    
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    OCP-1Z0-053-200题-178题-187
    OCP-1Z0-053-200题-179题-232
    OCP-1Z0-053-200题-181题-407
    OCP-1Z0-053-200题-182题-408
    OCP-1Z0-053-V13.02-408题
    OCP-1Z0-053-200题-183题-232
    OCP-1Z0-053-200题-184题-270
    OCP-1Z0-053-200题-185题-44
    OCP-1Z0-053-200题-186题-61
    OCP-1Z0-053-200题-187题-610
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9368749.html
Copyright © 2011-2022 走看看