当前位置: 首页 > news >正文

$k$ 边最短路-矩乘

\(k\) 边最短路-矩乘

P2886 Cow Relays G
简单模板

题意

给定 \(T\) 条边(\(T \le 100\)),起点 \(s\) 和终点 \(v\),问 \(s\)\(v\) 经过 \(n\) 条边的最短路长度。

思路

写过几题矩阵乘法的都知道一个 \(01\) 邻接矩阵的方,就成了一个点经过两条边能否到另一个点。我们修改一下,把原本的两个 \(1\) 相乘得到 \(1\) 表示可达,换成最短路的不可达用 \(INF\) 表示,两条边相加取 \(min\) 表示可能的最短路。同样我们发现,$ C[i][j]=A[i][k]+B[k][j]$ 满足矩阵乘法的交换律和分配律,意味着可以进行矩阵快速幂。其他细节看注释。

code

#include <bits/stdc++.h>
#define int long long
using namespace std;
constexpr int maxn = 1e3 + 10;
constexpr int INF = 0x3f3f3f3f3f3f3f3f;typedef struct mat
{vector<vector<int>> num;int row, col;mat(int r, int c, int x = 0) : row(r), col(c){// 这题的矩阵默认都应该是INF,但我这里是传INFnum.assign(r, vector<int>(c, x));}vector<int> &operator[](const int &x)// vector的[]重载{return num[x];}const vector<int> &operator[](const int &x) const{return num[x];}mat operator*(const mat &x) const{mat ret(row, x.col, INF);for (int i = 0; i < row; ++i){for (int k = 0; k < col; ++k)// 先行后列快一点{int val = num[i][k];for (int j = 0; j < x.col; ++j){ret[i][j] = min(ret[i][j], val + x[k][j]);// 取nin}}}return ret;}mat operator^(int ci) const{if(!ci) return *this;mat ans = *this;// 默认一次,不用构造单位矩阵(这里的单位矩阵是对角线为0,其余为INF)mat base = *this;--ci;while (ci){if (ci & 1) ans = ans * base;base = base * base;ci >>= 1;}return ans;}
} mat;int id[maxn];
mat mp(105, 105, INF);signed main()
{
#ifndef ONLINE_JUDGEfreopen("cjdl.in", "r", stdin);freopen("cjdl.out", "w", stdout);
#endifint n, t, s, e, idx = 0;scanf("%lld%lld%lld%lld", &n, &t, &s, &e);for (int i = 1, w, u, v; i <= t; ++i){scanf("%lld%lld%lld", &w, &u, &v);u = id[u] ? id[u] : id[u] = ++idx;// 映射v = id[v] ? id[v] : id[v] = ++idx;mp[u][v] = mp[v][u] = min(mp[u][v], w);}mp = mp^n;s = id[s];e = id[e];printf("%lld", mp[s][e]);return 0;
}
http://www.jsqmd.com/news/377400/

相关文章:

  • Linux随记
  • 你认真写下的每一个字,都值得被相信 ✨
  • 大润发购物卡快速变现攻略 - 团团收购物卡回收
  • SharePoint Online 网站配置时区
  • 河北粘钉一体机厂家2026年推荐榜,品质与口碑并存,河北粘钉一体机公司哪个好解决方案与实力解析 - 品牌推荐师
  • 大模型“涌现能力”的来源解析
  • 开题总被退回?试试百考通AI——专业、规范、0代写风险!
  • 2026年大型集团资产管理系统软件哪家好?资产管理系统平台推荐 - 品牌2025
  • 靶心转移:开发者成网络攻击首要突破口,供应链与AI暗战重构安全格局
  • 拒绝模板化!百考通AI生成个性化开题报告,贴合你的研究方向
  • 深入解析:TDengine C# 语言连接器入门指南
  • 抗衰产品哪款更靠谱?2026年高纯度NMN抗衰推荐,精准改善NAD+水平 - 资讯焦点
  • 3分钟生成高质量开题报告?百考通AI让选题不再卡壳!
  • js数组倒序函数
  • AI赋能·全域穿透:高级开源情报(OSINT)追踪技术全景与未来演进
  • 【无人机】基于实时3D蒙特卡洛梯度搜索的自主无人机载空气过滤系统附matlab代码
  • NMN抗衰产品如何选?2026权威NAD补充剂质量测评,延缓衰老不迷路 - 资讯焦点
  • Gemini AI武器化失控:黑客滥用生成恶意代码,无文件攻击席卷全球APT战场
  • 从选题到框架全搞定!百考通AI开题报告,助你轻松过审第一步
  • 百考通:AI驱动数据分析,让专业洞察触手可及
  • 以非常6+1体系为支撑 融入AI智能名片商城小程序 提升组织建设效能
  • 深度解析双大马士革工艺:芯片互连的核心基石
  • 百考通:AI智能生成实践报告,让实习成果完美呈现
  • 别再瞎找了!专科生专属AI论文平台 —— 千笔
  • OUTLOOK无法预览Excel附件的解决方法
  • 瑞祥商联卡提现到微信的超简单教学 - 团团收购物卡回收
  • 百考通:AI时代学术写作的“守护者“,让论文降重与降AIGC一步到位
  • 实测对比后!千笔·专业降AIGC智能体,人气爆表的降AIGC工具
  • 横评后发现!专科生必备的一键生成工具 —— 千笔写作工具
  • 百考通AIGC检测:精准识别AI生成内容,守护学术诚信的专业卫士