首页 > 其他分享 >dijkstra + 单调栈优化

dijkstra + 单调栈优化

时间:2023-08-06 15:56:49浏览次数:32  
标签:tmp cnt int dijkstra MAXN 优化 单调 dis

打 Div.3 发现两个最短路板子题一个用的 SPFA 一个用的邻接矩阵,赶紧补个。


#include <iostream>
#include <queue>
#define MAXN 20010
using namespace std;
const int inf = 2147483647;
int n,m,s,t,cnt;
int dis[MAXN],h[MAXN],to[MAXN],val[MAXN],nxt[MAXN];
bool vis[MAXN];
struct node {
    int v,w;
    friend bool operator < (node a,node b) {
        return a.w > b.w;
    }
} tmp;
priority_queue <node> q;
void add(int a,int b,int c) {
    to[++cnt] = b;
    val[cnt] = c;
    nxt[cnt] = h[a];
    h[a] = cnt;
}
void dijkstra() {
    for(int i = 1;i <= n;++ i) dis[i] = inf;
    dis[s] = 0;
    tmp.v = s;tmp.w = 0;q.push(tmp);
    while(!q.empty()) {
        int u = q.top().v;
        q.pop();
        if(vis[u]) continue;
        vis[u] = 1;
        for(int i = h[u];i;i = nxt[i]) {
            if(dis[to[i]] > (long long)dis[u] + val[i]) {
                dis[to[i]] = dis[u] + val[i];
                tmp.w = dis[to[i]];
                tmp.v = to[i];
                q.push(tmp);
            }
        }
    }
    for(int i = 1;i <= n;++i)
    cout <<dis[i] << ' ';
}
int main() {
    cin >> n >> m >> s;
    int u,v,w;
    for(int i = 1;i <= m;++ i) {
        cin >> u >> v >> w;
        add(u,v,w);
    }
    dijkstra();
    return 0;
}

时间复杂度\({O(nlogn)}\)

标签:tmp,cnt,int,dijkstra,MAXN,优化,单调,dis
From: https://www.cnblogs.com/eegg/p/17609492.html

相关文章

  • 使用缓存优化网站性能:缓解数据库压力,提高访问速度
    使用缓存是一种有效的优化网站性能的方式,特别是对于那些访问集中在少部分数据上的场景,可以显著减轻数据库的压力,提高网站的响应速度和性能。缓存的主要原理是将常用的数据存储在内存中,以避免频繁地从数据库读取数据。由于内存的读写速度远远快于磁盘,通过缓存可以大幅提高数据访问......
  • 如何使用 Python 运算符进行性能优化 All In One
    如何使用Python运算符进行性能优化AllInOne为什么Python运算符//比运算符/性能更好,运行速度更快呀❓WhyPythonoperator//isfasterthanoperator/demosclassSolution:defnumberOfSteps(self,num:int)->int:steps:int=0whilenum>......
  • .NET 个人博客-首页排版优化-2
    个人博客-首页排版优化-2原本这篇文章早就要出了的,结果之前买的服务器服务商跑路了,导致博客的数据缺失了部分。我是买了一年的服务器,然后用了3个月,国内跑路云太多了,然后也是花钱重新去别的服务商买了一台服务器,这次只买了一个月,先试试水。优化计划置顶3个且可滚动或切换推......
  • 六、查询性能优化
    查询优化、索引优化、库表结构优化需要齐头并进,一个不落6.1为什么查询速度会慢真正重要的是响应时间。如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数,要......
  • SQL分页优化六 分区表分页
    测试验证如果分页语句中排序的表是分区表,这时我们要看分页语句是否有跨区扫描:如果有跨区扫描,创建索引一般为global索引,如果不创建global索引,就无法保证分页的顺序与索引的顺序一致。如果只扫描一个分区这时可以创建local索引。CREATETABLEP_TEST(OWNERVARCHAR2(30),OB......
  • 10条SQL优化技巧
    一、一些常见的SQL实践(1)负向条件查询不能使用索引select*fromorderwherestatus!=0andstauts!=1notin/notexists都不是好习惯可以优化为in查询:select*fromorderwherestatusin(2,3)(2)前导模糊查询不能使用索引select*fromorderwheredesclike‘%XX’而非前导模糊......
  • SQL分页优化三 降序排序+分页
    测试验证如下SQL:select*from(select*from(selecta.*,rownumrnfrom(select*fromtestorderbyobject_id,object_namedesc)a)whererownum<=10)wherern>......
  • SQL分页优化四 等值+非等值+order by分页
    测试验证现有如下SQL,每页显示10条:select*fromtestwhereowner='SYS'andobject_id>1000orderbyobject_name;select*from(select*from(selecta.*,rownumrnfrom(select*fromt......
  • SQL分页优化五 like+非等值+order by分页
    测试验证如下SQL:select*from(select*from(selecta.*,rownumrnfrom(select*fromtestwhereownerlike'SYS%'......
  • openGauss的SQL引擎在3.1.0版本中做了哪些优化?
    openGauss的SQL引擎在3.1.0版本中做了哪些优化?收录于合集#技术干货83个查询执行能力对数据库来说至关重要,这直接决定了查询语句生成的执行计划以何种方式进行执行,如果哪个执行算子的执行表现不好,将会对数据库的整体性能产生极大的影响。同时,执行算子的实现也极大考验一款数据库的工......