zoukankan      html  css  js  c++  java
  • [Dijkstra] Hdu P6071 Lazy Running

    题解

    • 我们取w=min(a,b),那么如果存在一种路径长度为k,那么肯定存在一种长度为k+2w
    • 那么我们就可以dis[i][j]表示从起点出发到达i,距离模2w为j的最短路,然后跑Dijkstra得出dis数组
    • 最后根据dis[2][j]解不等式就好了

    代码

     1 #include <queue>
     2 #include <vector>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <iostream>
     6 #define ll long long
     7 using namespace std;
     8 const ll N=1000010,inf=2e18;
     9 typedef pair<ll,int>node; 
    10 priority_queue<node,vector<node>,greater<node> >Q;  
    11 struct edge {int to,from;ll w;}e[N];
    12 ll w,ans,k,a,b,c,d,dis[5][N];
    13 int T,cnt,head[N];
    14 void insert(int x,int y,ll w)
    15 {
    16     e[++cnt].to=y,e[cnt].from=head[x],head[x]=cnt,e[cnt].w=w;
    17     e[++cnt].to=x,e[cnt].from=head[y],head[y]=cnt,e[cnt].w=w;
    18 }
    19 void dijkstra(ll s)
    20 {
    21     for (ll i=0;i<=4;i++) for (ll j=0;j<w;j++) dis[i][j]=inf;
    22     Q.push(make_pair(0ll,s));
    23     while (!Q.empty())
    24     {
    25         ll x=Q.top().first;int y=Q.top().second; Q.pop();
    26         if (x>dis[y][x%w]) continue;
    27         for (int i=head[y];i;i=e[i].from)
    28         {
    29             ll xx=x+e[i].w;
    30             if (dis[e[i].to][xx%w]>xx) dis[e[i].to][xx%w]=xx,Q.push(make_pair(xx,e[i].to));
    31         }
    32     }
    33 }
    34 int main()
    35 {
    36     scanf("%d",&T);
    37     while (T--)
    38     {
    39         memset(head,-1,sizeof(head)),scanf("%lld%lld%lld%lld%lld",&k,&a,&b,&c,&d),ans=inf,cnt=0;
    40         w=2*min(a,b);
    41         insert(1,2,a),insert(2,3,b),insert(3,4,c),insert(1,4,d),dijkstra(2);
    42         for (ll i=0;i<w;i++) if (k<=dis[2][i]) ans=min(ans,dis[2][i]); else ans=min(ans,dis[2][i]+((k-dis[2][i]+w-1)/w)*w);
    43         printf("%lld
    ",ans);
    44     }
    45 }
  • 相关阅读:
    python https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
    python打包为exe文件
    文件自定义扫描工具
    pandas 的常用方法
    cisco应用
    Cisco 模拟配置
    python 识别图片上的数字
    OpenSSL
    OpenSSL
    OpenSSL
  • 原文地址:https://www.cnblogs.com/Comfortable/p/11364411.html
Copyright © 2011-2022 走看看