zoukankan      html  css  js  c++  java
  • SPFA+SLF+LLL优化模板

     1 #include<algorithm>
     2 #include <iostream>
     3 #include  <cstdlib>
     4 #include  <cstring>
     5 #include  <climits>
     6 #include   <cstdio>
     7 #include   <string>
     8 #include    <cmath>
     9 #include    <stack>
    10 #include    <deque>
    11 
    12 using namespace std;
    13 const int INF=1<<30;
    14 const int gg=200000 + 11;
    15 int head[gg];
    16 int dis[gg];
    17 int n,m;
    18 int cnt;
    19 bool vis[gg];
    20 int sum,tot;
    21 struct node{
    22     int net;
    23     int to;
    24     int w;
    25 }a[gg];
    26 
    27 inline void add(int i,int j,int w)
    28 {
    29     a[++cnt].to=j;
    30     a[cnt].net=head[i];
    31     a[cnt].w=w;
    32     head[i]=cnt;
    33 }
    34 
    35 inline void spfa(int s)
    36 {
    37     deque<int>q;
    38     for(int i=1;i<=n;i++)
    39         dis[i]=INF;
    40     dis[s]=0;
    41     vis[s]=true;    
    42     q.push_back(s);
    43     tot=1;
    44     while(!q.empty())
    45     {
    46         int u=q.front();
    47         q.pop_front();
    48         vis[u]=false;
    49         tot--;
    50         sum-=dis[u];
    51         for(int i=head[u];~i;i=a[i].net)
    52         {
    53             int v=a[i].to;
    54             if(dis[v]>dis[u]+a[i].w)
    55             {
    56                 dis[v]=dis[u]+a[i].w;
    57                 if(!vis[v])
    58                 {
    59                     vis[v]=true;
    60                     if(q.empty()||dis[v]>dis[q.front()]||dis[v]*tot<=sum)
    61                     q.push_back(v);
    62                     tot++;
    63                     sum+=dis[v];
    64                 }
    65             }
    66         }
    67     }
    68 }
    69 
    70 int main()
    71 {
    72     memset(head,-1,sizeof(head));
    73     cin>>n>>m;
    74     for(int i=1;i<=m;i++)
    75     {
    76         int a,b,c;
    77         cin>>a>>b>>c;
    78         add(a,b,c);
    79         add(b,a,c);
    80     }
    81     spfa(1);
    82     if(dis[n]==INF)
    83     {
    84         cout<<-1<<endl;
    85         return 0;
    86     }
    87     else
    88     {
    89         cout<<dis[n]<<endl;
    90     }
    91     return 0;
    92 }
  • 相关阅读:
    Java图片裁剪
    jvm参数
    Druid数据源监控配置
    执行jar包或执行其中的某个类
    十进制和二进制之间的相互转化
    Java位运算
    获取网络资源保存本地
    前端PHP入门-010-内部函数
    前端PHP入门-011-可变函数
    前端PHP入门-009-匿名函数
  • 原文地址:https://www.cnblogs.com/Hammer-cwz-77/p/7807645.html
Copyright © 2011-2022 走看看