找回密码
 立即注册
首页 业界区 业界 算竞代码设计与技巧解析

算竞代码设计与技巧解析

甄婉丽 2026-1-23 14:00:06
本文使用了ai辅助,旨在更好的帮助大家理解一些技巧
邮递员送信_牛客题霸_牛客网
以这一题为例,需要对节点 1 求 两次 dijkstra,怎么使得代码写的简洁?
ac 代码如下,我们来一一解析:
[code]void solve(){        int n(q_), m(q_);        using ED = array;        using GRAPH = vector;        GRAPH tr(n + 1);        GRAPH rtr(n + 1);        ffp(i, 1, m)        {                int u(q_), v(q_), w(q_);                tr.push_back({ w,v });//tr是树边,本人的习惯                rtr[v].push_back({ w,u });//rtr是反图        }        auto dij = [&](int st, GRAPH& gp)->ll                {                        priority_queuedui;                        vectordis(n + 1, iINF); dis[st] = 0;                        dui.push({ 0,st });                        while (dui.size())                        {                                auto [w, now] = dui.top();                                dui.pop();                                if (dis[now] < w)continue;                                for (auto [nxtw, nxt] : gp[now])                                {                                        if (nxtw + dis[now] >= dis[nxt])continue;                                        dis[nxt] = nxtw + dis[now];                                        dui.push({ nxtw + dis[now],nxt });                                }                        }                        return accumulate(dis.begin() + 1, dis.end(), 0ll);                };        cout

相关推荐

您需要登录后才可以回帖 登录 | 立即注册