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

    bzoj2662[BeiJing wc2012]冻结

    题意:

    有 N 个城市,M 条双向的道路,有K次机会使通过某条道路时时间变慢 50%。注意在一条道路上最多只能使用一次机会,且不必使用完所有机会。 求从城市1 到城市N最少需要多长时间。(每条双向边等价于两条单向边)

    题解:

    分层图最短路。这道题数据弱,可以按次数拆点,但下一道题就不行了,正解是在作spfa时“拆点”,把d弄成二维数组。虽然感觉上是一样的,但时间却相差很大,不知道为什么。

    代码:

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <queue>
     5 #define INF 0x3fffffff
     6 #define inc(i,j,k) for(int i=j;i<=k;i++)
     7 #define turn(x,y) (y-1)*n+x
     8 using namespace std;
     9 
    10 struct e{int t,w,n;}; int ess,g[100]; e es[200000];
    11 void pe(int f,int t,int w){es[++ess]=(e){t,w,g[f]}; g[f]=ess;}
    12 int n,m,k,s,t,d[100][100]; bool inq[100][100];
    13 struct nd{int x,y;}; queue <nd> q;
    14 void spfa(){
    15     while(! q.empty())q.pop(); inc(i,1,n)inc(j,1,k+1)d[i][j]=INF;
    16     d[1][1]=0; q.push((nd){1,1}); inq[1][1]=1;
    17     while(! q.empty()){
    18         nd x=q.front(); q.pop(); inq[x.x][x.y]=0;
    19         for(int i=g[x.x];i;i=es[i].n)if(d[es[i].t][x.y]>d[x.x][x.y]+es[i].w){
    20             d[es[i].t][x.y]=d[x.x][x.y]+es[i].w;
    21             if(! inq[es[i].t][x.y])q.push((nd){es[i].t,x.y}),inq[es[i].t][x.y]=1;
    22         }
    23         if(x.y<=k)for(int i=g[x.x];i;i=es[i].n)if(d[es[i].t][x.y+1]>d[x.x][x.y]+(es[i].w>>1)){
    24             d[es[i].t][x.y+1]=d[x.x][x.y]+(es[i].w>>1);
    25             if(! inq[es[i].t][x.y+1])q.push((nd){es[i].t,x.y+1}),inq[es[i].t][x.y+1]=1;
    26         }
    27     }
    28 }
    29 int main(){
    30     scanf("%d%d%d",&n,&m,&k); ess=0; memset(g,0,sizeof(g));
    31     inc(i,1,m){
    32         int a,b,c;scanf("%d%d%d",&a,&b,&c); pe(a,b,c),pe(b,a,c);
    33     }
    34     spfa(); int min=INF; inc(i,1,k+1)if(d[n][i]<min)min=d[n][i];
    35     printf("%d",min);
    36     return 0;    
    37 }

    20160406

  • 相关阅读:
    HDU
    矩形嵌套(DP)
    HDU
    HDU-1003 Max Sum
    Manacher算法—最长回文串
    Codeforces Round #460 (Div. 2) A B C D
    HDU 4540 威威猫系列故事——打地鼠 (简单DP)
    UVA 129 Krypton Factor(DFS 回溯)
    Codeforces 918A Eleven 918B Radio Station
    挑战程序设计竞赛(第2版)第112页勘误
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5693134.html
Copyright © 2011-2022 走看看