zoukankan      html  css  js  c++  java
  • 洛谷 1359 租用游艇

    【题解】

      裸的最短路。直接跑dijkstra即可。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #define LL long long
     5 #define rg register
     6 #define N 200010
     7 using namespace std;
     8 int n,tot,last[N],dis[N],pos[N];
     9 struct edge{
    10     int to,pre,dis;
    11 }e[N];
    12 struct heap{
    13     int poi,dis;
    14 }h[N];
    15 inline int read(){
    16     int k=0,f=1; char c=getchar();
    17     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    18     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    19     return k*f;
    20 }
    21 inline void up(int x){
    22     int fa;
    23     while((fa=(x>>1))&&h[fa].dis>h[x].dis) 
    24         swap(h[fa],h[x]),swap(pos[h[fa].poi],pos[h[x].poi]),x=fa;
    25 }
    26 inline void down(int x){
    27     int son;
    28     while((son=(x<<1))<=tot){
    29         if(h[son].dis>h[son+1].dis&&son<tot) son++;
    30         if(h[son].dis<h[x].dis)
    31             swap(h[son],h[x]),swap(pos[h[son].poi],pos[h[x].poi]),x=son;
    32         else return;
    33     }
    34 }
    35 inline void dijkstra(int x){
    36     for(rg int i=1;i<=n;i++) dis[i]=1e9;
    37     h[tot=pos[x]=1]=(heap){x,dis[x]=0};
    38     while(tot){
    39         int now=h[1].poi; h[1]=h[tot--]; if(tot) down(1);
    40         for(rg int i=last[now],to;i;i=e[i].pre)
    41         if(dis[to=e[i].to]>dis[now]+e[i].dis){
    42             dis[to]=dis[now]+e[i].dis;
    43             if(!pos[to]) h[pos[to]=++tot]=(heap){to,dis[to]};
    44             else h[pos[to]].dis=dis[to];
    45             up(pos[to]);
    46         }
    47         pos[now]=0;
    48     }
    49 }
    50 int main(){
    51     n=read();
    52     for(rg int i=1;i<=n;i++)
    53         for(rg int j=i+1;j<=n;j++) e[++tot]=(edge){j,last[i],read()},last[i]=tot;
    54     dijkstra(1);
    55     printf("%d
    ",dis[n]);
    56     return 0; 
    57 }
    View Code
  • 相关阅读:
    分布式哈希和一致性哈希算法
    消息队列rabbitmq的五种工作模式(go语言版本)
    Mysql查询缓存
    数据库的三大设计范式
    二叉树的常见算法
    消息队列选型分析
    Mysql防止索引失效原则
    Mysql索引优化单表、两表、三表实践
    数据结构 【栈与队列】
    谷歌实用插件
  • 原文地址:https://www.cnblogs.com/DriverLao/p/9398059.html
Copyright © 2011-2022 走看看