首页 > 其他分享 >单源最短路模板

单源最短路模板

时间:2023-10-01 17:01:07浏览次数:35  
标签:dist idx int rint 短路 单源 ne const 模板

SPFA

#include <bits/stdc++.h>

#define rint register int
#define endl '\n'

using namespace std;

const int N = 1e5 + 5;
const int M = 1e6 + 5;
const int inf = 1e9;

int h[N], e[M], ne[M], dist[N], w[M];
int n, m, s, idx;

queue<int> q;
bool v[N];

void add(int a, int b, int c)
{
    e[++idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx;
}

void SPFA()
{
    memset(dist, 0x3f, sizeof dist);
    memset(v, 0, sizeof v);
    dist[s] = 0;
    v[s] = true;
    q.push(s);
    while (!q.empty())
    {
        int x = q.front();
        q.pop();
        v[x] = false;
        for (rint i = h[x]; i; i = ne[i])
        {
            int y = e[i];
            int z = w[i];
            if (dist[y] > dist[x] + z)
            {
                dist[y] = dist[x] + z;
                if (!v[y])
                {
                    q.push(y);
                    v[y] = true;
                }
            }
        }
    }
}

signed main()
{
    cin >> n >> m >> s;
    
    for (rint i = 1; i <= m; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        add(a, b, c);
    }

    SPFA();

    for (rint i = 1; i <= n; i++)
    {
        /*if (dist[i] == 0x3f3f3f3f)
        {
            cout << 2147483647 << " ";
            continue;
        }*/
        cout << dist[i] << " ";
    }

    return 0;
}

dijkstra

#include <bits/stdc++.h>

#define rint register int
#define endl '\n'

using namespace std;

const int N = 1e5 + 5;
const int M = 1e6 + 5;

int h[N], e[M], ne[M], w[M], idx;
int dist[N];
bool v[N];
int n, m, s = 1, t;

std::priority_queue<std::pair<int, int> > q;

void add(int a, int b, int c)
{
    e[++idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx;
}

void dijkstra()
{
    memset(dist, 0x3f, sizeof dist);
    memset(v, 0, sizeof v);
    dist[s] = 0;
    q.push(std::make_pair(0, s));
    while (!q.empty())
    {
        int x = q.top().second;
        q.pop();
        if (v[x])
        {
            continue;
        }
        v[x] = 1;
        for (rint i = h[x]; i; i = ne[i])
        {
            int y = e[i];
            int z = w[i];
            if (dist[y] > dist[x] + z)
            {
                dist[y] = dist[x] + z;
                q.push(std::make_pair(-dist[y], y));
            }
        }
    }
}

int main()
{
    cin >> n >> m;
    
    for (rint i = 1; i <= m; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        add(a, b, c);
    }
    
    dijkstra();
    
    printf("%d", dist[n]);
    
    return 0;
}

标签:dist,idx,int,rint,短路,单源,ne,const,模板
From: https://www.cnblogs.com/spaceswalker/p/17738994.html

相关文章

  • 【13.0】Fastapi中的Jinja2模板渲染前端页面
    【一】创建Jinja2引擎#必须模块fromfastapiimportRequest#必须模块fromfastapi.templatingimportJinja2Templates#创建子路由application=APIRouter()#创建前端页面配置templates=Jinja2Templates(directory='./coronavirus/templates')#初始化数据库......
  • 算法模板
    算法模板1.排序(1)快速排序(NoSTL)#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongintn,a[100010];voiddfs(intl,intr){ if(l>=r) return; intpos=(l+r)>>1; intx=a[pos]; inti=l,j=r; while(i<=j) {......
  • springboot web开发整合Freemarker 模板引擎
    目录Freemarker添加依赖配置文件ymlcontrollerhtmlFreemarker简介:FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组......
  • java 实现模板方法模式
    模板方法模式(TemplateMethodPattern)是一种行为型设计模式,它定义了一个算法的骨架,将具体的步骤延迟到子类中实现。模板方法模式使得子类可以重新定义算法的某些步骤,而不改变算法的结构。以下是一个简单的Java示例,演示如何实现模板方法模式:首先,定义一个抽象类Game,它包含一个模板方......
  • 模板
    前缀和s[i]=s[i-1]+a[i];s[r]-s[l-1]二维前缀和s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1]s[i][j]-s[i-1][j]-s[i][j-1]+s[i-1][j-1]差分d[l]++,d[r+1]--;二维差分d[x1][y1]++,d[x2+1][y2+1]++;d[x1][y2+1]--,d[x2......
  • 快读“慢”写模板
    //万能头文件#include<bits/stdc++.h>usingnamespacestd;template<typenameT>inlineTread(T&ret){charc;intf=1;ret=0; //Don'tforgetthis!for(c=getchar();c<'0'||c>'9';c=getchar())if(c==&......
  • 二进制有关操作模板
    lowbit:lowbit(x)是$x$的二进制表达式中最低位的1所对应的值template<typenameT>Tlowbit(Tx){returnx&-x;}求二进制中1的个数:【方法一】库函数:__builtin_popcountll(n)附库函数的具体实现:unsignedpopcount(unsignedu){ u=(u&0x55555555)+......
  • Go每日一库之128:podinfo(k8s微服务模板)
    项目介绍官方Github:PodinfoPodinfo是一个用Go制作的小型web应用程序,它展示了在Kubernetes中运行微服务的最佳实践。它已实现的技术指标(截选自官方README.md):里面每一项技术指标的实现方式,其实都可以拿出来单独讲好久,相关理论也有好多。这里我只是讲针对这个项......
  • 【模板】线性筛素数
    【模板】线性筛素数点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineLLlonglongconstintN=1e8+10;intp[N],cnt,vis[N];intmain(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); intn,q; cin>>n>>q; for(inti=2;i......
  • [算法分析与设计] 1. 全源最短路近似
    全源最短路(APSP)近似。有两种近似stretch\(k\).\(\delta(u,v)\leqd(u,v)\leqk\cdot\delta(u,v)\).surplus\(t\).\(\delta(u,v)\leqd(u,v)\leq\delta(u,v)+t\).其中,\(\delta(u,v)\)表示\(u,v\)间真实的最短路长度。先来考虑无权图上的surplus......