zoukankan      html  css  js  c++  java
  • 板子,单源最短路+堆优化

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<cstring>
    #include<algorithm>
    typedef long long LL;
    using namespace std;
    LL RD(){
        LL out = 0,flag = 1;char c = getchar();
        while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
        while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
        return flag * out;
        }
    const LL maxn = 1000019,INF = 0xfffffffffffffff;
    LL head[maxn],nume = 1;
    struct Node{
        LL v,dis,nxt;
        }E[maxn << 3];
    void add(LL u,LL v,LL dis){
        E[++nume].nxt = head[u];
        E[nume].v = v;
        E[nume].dis = dis;
        head[u] = nume;
        }
    LL num, nr, s;
    bool vis[maxn];
    LL d[maxn];
    struct node{
        LL u, d;
        bool operator < (const node &a)const{
            return d > a.d;
            }
        };
    void Djs(LL s){
        for(LL i = 1;i <= num;i++)d[i] = INF;
        priority_queue<node>Q;
        d[s] = 0;
        Q.push((node){s, d[s]});
        while(!Q.empty()){
            LL u = Q.top().u;Q.pop();
            if(vis[u])continue;
            vis[u] = 1;
            for(LL i = head[u];i;i = E[i].nxt){
                LL v = E[i].v, dis = E[i].dis;
                if(d[u] + dis < d[v]){
                    d[v] = d[u] + dis;
                    Q.push((node){v, d[v]});
                    }
                }
            }
        }
    int main(){
        num = RD();nr = RD();s = RD();
        for(int i = 1;i <= nr;i++){
            LL u = RD(), v = RD(), dis = RD();
            add(u, v, dis);
            }
        Djs(s);
        for(int i = 1;i <= num;i++)printf("%lld ", d[i]);
        return 0;
    }
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 struct SYM{
     4     int to,next,w;
     5 }edge[500010];
     6 struct LKJ{
     7     int v,c;
     8     bool operator <(const LKJ &a)const {
     9         return c>a.c;
    10     }
    11 };
    12 priority_queue<LKJ,vector<LKJ> > q;
    13 int head[101000],vis[101000],tot,dis[101000],n,m,k;
    14 void add(int x,int y,int w){
    15     edge[++tot].to=y;
    16     edge[tot].w=w;
    17     edge[tot].next=head[x];
    18     head[x]=tot;
    19 }
    20 void dij(int s){
    21      dis[s]=0;
    22      LKJ hh;hh.v=s;hh.c=0; 
    23      q.push(hh);
    24      while(!q.empty()){
    25          LKJ tmp=q.top();q.pop();
    26          int x=tmp.v;
    27         if(vis[x]) continue;vis[x]=1;
    28          for(int i=head[x];i;i=edge[i].next)
    29              if(!vis[edge[i].to]&&dis[edge[i].to]>dis[x]+edge[i].w){
    30                  dis[edge[i].to]=dis[x]+edge[i].w;
    31                  hh.v=edge[i].to;hh.c=dis[edge[i].to];
    32                  q.push(hh);
    33              }
    34     }
    35 }
    36 int main(){
    37     memset(dis,127,sizeof(dis));
    38     int x,y,w;
    39     scanf("%d%d%d",&n,&m,&k);
    40     for(int i=1;i<=m;i++){
    41         scanf("%d%d%d",&x,&y,&w);
    42         add(x,y,w);
    43     }
    44     dij(k);
    45     for(int i=1;i<=n;i++){
    46         if(dis[i]==2139062143) printf("2147483647 ");
    47         else printf("%d ",dis[i]);
    48     }
    49     return 0;
    50 }
    
    
    
     
  • 相关阅读:
    浅析JNI
    网易云音乐歌词下载器
    如何用一个SQL“搞挂”一个服务模块
    SpingBoot 1.5.2,MultipartFile保存图片时的不稳定异常(好像和内置tomcat有关)
    double 去除小数点后的0
    项目中时间处理----今天:时分(10:15),昨天/前天:(昨天/前天),除此之外的本周(星期几),再往前年.月.日(2017.06.15)
    SpringMvc 静态内部类 封装请求数据
    jsp页面 ajax提交数组 到struts2的action
    Struts2 s:if test判断时遇到的问题
    Struts2中 iterator隔行变色
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/12577209.html
Copyright © 2011-2022 走看看