zoukankan      html  css  js  c++  java
  • bzoj2662: [BeiJing wc2012]冻结 最短路 建图

    好久没有1A题啦♪(^∇^*)

    一个sb建图,我居然调样例调了10min

    看起来是双向边,其实在建图的时候要当成有向图,

    否则他会时间倒流(233)

    把每个点裂成k个点,然后把每条边裂成4条边(正向反向&膜不膜)

    (话说我好像不会用openlivewriter贴代码,尴尬了)

     1 #include <bits/stdc++.h>
     2 #define poi(x,y) ((x)*(k+1)+(y))
     3 #define st poi(1,0)
     4 #define INF 2000000000
     5 using namespace std;
     6 int n,m,k,E;
     7 int from[2000001],to[2000001],nex[2000001];
     8 int fir[2000001],d[2000001],w[2000001];
     9 void add(int x,int y,int z)
    10 {
    11     from[++E]=x;to[E]=y;w[E]=z;nex[E]=fir[x];fir[x]=E;
    12 }
    13 int work()
    14 {
    15     for(int i=1;i<=poi(n,k);i++)
    16         d[i]=INF;
    17     d[st]=0;
    18     priority_queue<pair<int,int> > q;
    19     for(int i=fir[st];i;i=nex[i])
    20         q.push(make_pair(-w[i],i));
    21     while(!q.empty())
    22     {
    23         int tem=q.top().second;q.pop();
    24         if(to[tem]>=poi(n,0))
    25             int e=1;
    26         if(d[from[tem]]!=INF && d[from[tem]]+w[tem]<d[to[tem]])
    27         {
    28             d[to[tem]]=d[from[tem]]+w[tem];
    29             for(int i=fir[to[tem]];i;i=nex[i])
    30                 q.push(make_pair(-w[i],i));
    31         }
    32     }
    33     return d[poi(n,k)];
    34 }
    35 int main()
    36 {
    37     scanf("%d%d%d",&n,&m,&k);
    38     for(int i=1;i<=m;i++)
    39     {
    40         int from,to,wei;
    41         scanf("%d%d%d",&from,&to,&wei);
    42         for(int j=0;j<k;j++)
    43             add(poi(from,j),poi(to,j+1),wei/2),
    44             add(poi(to,j),poi(from,j+1),wei/2);
    45         for(int j=0;j<=k;j++)
    46             add(poi(from,j),poi(to,j),wei),
    47             add(poi(to,j),poi(from,j),wei);
    48     }
    49     for(int i=0;i<k;i++)
    50         add(poi(n,i),poi(n,k),0);
    51     printf("%d
    ",work());
    52     return 0;
    53 } 
  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/wanglichao/p/7337376.html
Copyright © 2011-2022 走看看