KEYENCE Programming Contest 2023 Autumn(AtCoder Beginner Contest 325) - AtCoder E

E - Our clients, please wait a moment (atcoder.jp)(分层图最短路)

因为只能从坐公司汽车切换到做火车,所以我们可以考虑采用分层图最短路.

对于坐公司汽车和坐火车分别建立\(G_0\)和\(G_1\)两张图,且因为可以在任意时刻任意地点从公司汽车切换到火车,所以我们可以对于每个地点建立\(\forall x(G_0(x) \rightarrow G_1(x))\)的边权为\(0\)的有向边,\(G_0\)为第一层,有节点\(1 \sim n\),即公司汽车的路线;第二层有节点\(1+n \sim n + n\),即火车的路线,两层节点间\(i\)与\(i+n\)也用权值为0的有向边连起来,起点为第一层的\(1\),终点就是第二层的\(n+n\),注意因为分层,所以分层图\(dis\)范围初始化是\(K\)(\(K\)层)\(\times N + N\)(\(N\)个点).

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; const int MAXV = 1e4 + 1;
struct edge {
i64 to, cost;
}; vector<edge> G[MAXV];
i64 d[3010]; void dijkstra(int s) { priority_queue<PII, vector<PII>, greater<PII> > que; memset(d, 0x3f3f3f3f, sizeof d);
d[s] = 0;
que.push(PII(0, s));
while (!que.empty())
{
PII p = que.top(); que.pop();
int v = p.second;
if (d[v] < p.first) continue;
for (int i = 0; i < G[v].size(); i++) {
edge e = G[v][i];
if (d[e.to] > d[v] + e.cost) {
d[e.to] = d[v] + e.cost;
que.push(PII(d[e.to], e.to));
}
}
}
} int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int A, B, C, N;
cin >> N >> A >> B >> C;
vector D(N + 1, vector<i64>(N + 1));
for (int i = 1; i <= N; i ++)
for (int j = 1; j <= N; j ++)
cin >> D[i][j]; for (int i = 1; i <= N; i ++) {
for (int j = 1; j <= N; j ++) {
if (i == j) continue;
G[i].push_back(edge{j, D[i][j] * A});
G[i].push_back(edge{i + N, 0});
G[i + N].push_back(edge{j + N, D[i][j] * B + C});
}
} dijkstra(1); cout << d[N + N] << '\n'; return 0;
}

参考资料

浅析分层图最短路 - feather02的博客 - 洛谷博客 (luogu.com.cn)

ABC325E 题解 - Welcome to CultReborn's Blog - 洛谷博客 (luogu.com.cn)

分层图复习 / abc325e - 可可爱爱 - 洛谷博客 (luogu.com.cn)

[KEYENCE Programming Contest 2023 Autumn(AtCoder Beginner Contest 325) E的更多相关文章

  1. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  2. AtCoder Beginner Contest 184 题解

    AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...

  3. AtCoder Beginner Contest 255(E-F)

    Aising Programming Contest 2022(AtCoder Beginner Contest 255) - AtCoder E - Lucky Numbers 题意: 给两个数组a ...

  4. AtCoder Beginner Contest 177 题解

    AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...

  5. AtCoder Beginner Contest 173 题解

    AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...

  6. AtCoder Beginner Contest 172 题解

    AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...

  7. AtCoder Beginner Contest 254(D-E)

    Tasks - AtCoder Beginner Contest 254 D - Together Square 题意: 给定一个N,找出所有不超过N的 ( i , j ),使得( i * j )是一 ...

  8. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  9. AtCoder Beginner Contest 068 ABCD题

    A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...

  10. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

随机推荐

  1. 如何在 VSCode 中配置和编写 LINGO

    目录 如何在 VSCode 中配置和编写 LINGO 安装 VSCode 扩展 LINGO 脚本文件与 runlingo 命令 LINGO 命令行交互和脚本文件 配置 Visual Stdio Cod ...

  2. Stirling-PDF 安装和使用教程

    PDF (便携式文档格式) 目前已经成为了文档交换和存储的标准.然而,找到一个功能全面.安全可靠.且完全本地化的 PDF 处理工具并不容易.很多在线 PDF 工具存在隐私和安全风险,而桌面软件往往价格 ...

  3. VSCode 中 Markdown Preview Enhanced 插件利用 Chrome (Puppeteer) 导出 PDF 文件使用说明与问题解决

    准备 预先安装好 Chrome 浏览器. 使用方法 右键选择 Chrome (Puppeteer). 设置 Puppeteer 通过 front-matter 即在 markdown 文档开头加上 y ...

  4. 福利来了!MoneyPrinterPlus可以自动配置环境和自动运行了

    之前开源了MoneyPrinterPlus,可以实现批量混剪视频,一键生成视频和自动发布视频的功能. 但是经常会看到小伙伴在安装过程中遇到很多问题.所以这篇文章的目的就是告诉大家怎么使用MoneyPr ...

  5. ABP框架开发实例教程-生成数据库

    因为用SQLSERVER数据库比较多,这里就以SQLSERVER2014为例,下面说一下生成步骤: 1.用VS2019打开生成的ABP框架源码的解决方案,先修改web.mvc.web.host两个项目 ...

  6. 阿里云Centos7 安装mysql5.7 报错:./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

    在阿里云服务器Centos7中安装mysql5.7,解压数据库初始化后,报错 ./mysqld: error while loading shared libraries: libaio.so.1: ...

  7. Centos 7 永久关闭防火墙

    查看防火墙状态 systemctl status firewalld 出现:Active: inactive (dead),代表防火墙已关闭 临时关闭防火墙 重启后,防火墙会重新开启 systemct ...

  8. HTB- Archetype

    端口扫描 nmap -sV -sT 10.129.1.1 smbclint smbclient -L 10.129.149.214 获取密码 smbclient //10.129.149.214/ba ...

  9. [rCore学习笔记 00]总览

    写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 rCo ...

  10. 学习笔记--Java构造方法

    Java构造方法 关于构造方法 构造方法又被称作:构造函数/构造器/Constructor 语法结构: [修饰符列表] 构造方法名(形式参数列表){ 构造方法体; } 对比普通方法语法结构 [修饰符列 ...