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

5/26

5/26

该说不说图论真是挺神奇的啊哈哈哈哈哈哈哈
P2886 [USACO07NOV] Cow Relays G
作为一个图论初学者,更不会这道题了啊哈哈哈哈
看到这个题,对于这么庞大的数据范围,心态搞炸了啊哈哈哈哈
窝草
哦,好像也不大,注意到T是边,所以考虑Floyd
但是又注意到N极大,所以又不会了。
还是这个题还是好题
首先我们想出来的是,这个题需要用到邻接矩阵???
哦,点很小其实也很正常。
那就会做了。
结合前面的Floyd。
转移式子是\(F_{i,j}=min(F_{i,j},F_{i,k}+F_{k,j})\)
但是题解好像说的不是很详细,都是直接跳到矩阵。
具体地说,我们为什么要使用邻接矩阵呢?
那肯定是与矩阵有关。
对于矩阵乘法,它的式子是酱紫的:

\[C_{i,j}=\sum{A_{i,k}+B_{k,j}} \]

这个东西很像Floyd的转移对吧,但是好像我们不需要,我们需要的是min
这玩意儿是图论对吧,又不是数学,我们考虑定义一个新的计算方法

\[C_{i,j}=min(A_{i,k}+B_{k,j}) \]

简而言之:
\(A_{i,k}\)表示i走到k的最短路,\(B_{k,j}\)表示k到j的最短路,\(C_{i,j}\)表示i到j的最短路

问题是我们为什么要这么做,当然是为了优化啊!
我们发现,这个题让我们经过的边十分的多,在边的数量很多的时候,我们最短路一定会走重复的边。
这些边我们可以直接一次性算出来。
再不理解,就可以理解成倍增求Floyd行了///
这样的话矩阵快速幂就很快了。
当然还有一个优化就是,我们发现有一些点是没用的,直接离散化就行了。代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,T,s,e;
const int xx=1e3+5;
const int inf=1e12+18;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0' || ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0' && ch<='9'){x=x*10+(ch-'0');ch=getchar();}return x*f;
}
int t[xx][xx],ans[xx][xx];
int id[xx],tol;
void mul_st(int a[][xx],int b[][xx],int res[][xx]){for(int i=1;i<=tol;i++)for(int j=1;j<=tol;j++){t[i][j]=inf;}for(int k=1;k<=tol;k++)for(int i=1;i<=tol;i++)for(int j=1;j<=tol;j++)t[i][j]=min(t[i][j],a[i][k]+b[k][j]);for (int i=1;i<=tol;i++)for (int j=1;j<=tol;j++)res[i][j]=t[i][j];
}
int G[xx][xx];
void ksm(int k){for(int i=1;i<=tol;i++){for(int j=1;j<=tol;j++){ans[i][j]=G[i][j];}}k--;while(k){if(k&1) mul_st(ans,G,ans);mul_st(G,G,G);k>>=1;}
}
int get(int x) {if (!id[x]) id[x]=++tol;return id[x];
}
signed main(){n=read(),T=read(),s=read(),e=read();for(int i=1;i<=1000;i++){for(int j=1;j<=1000;j++){G[i][j]=inf;}}for(int i=1;i<=T;i++){int w=read(),u=read(),v=read();u=get(u),v=get(v);G[u][v]=G[v][u]=w;}ksm(n);cout<<ans[get(s)][get(e)]<<"\n";return 0;
}

The End

http://www.rkmt.cn/news/1392064.html

相关文章:

  • Ventoy如何突破RAID阵列启动限制:终极多系统引导解决方案
  • 高邮沙发翻新推荐换皮换布哪家好、匠阁、御匠、锦修三大品牌哪个靠谱公司、怎么选沙发翻新服务商 - 卓一科技
  • 2026年河南高低压成套电气设备选型避坑指南:从验收困局到安全交付的完整解决方案 - 年度推荐企业名录
  • 工业噪声终结者:深入拆解数据采集卡的隔离与防护设计
  • 从传感器到上位机:手把手教你搭建一套完整的数据采集系统
  • 打牌记账本:告别混乱计分的终极指南
  • 建筑应用“裂缝识别”高价值专利案例:基于深度可分离网络的混凝土桥裂缝识别方法
  • U-Net图像分割实战:从细胞膜识别到医学影像分析的完整指南
  • 3分钟掌握戴森球计划工厂蓝图:从新手到专家的完整解决方案
  • 豆包终端智能api的快速聊天
  • 基于RNNLM与语言学知识的SRL跨领域自适应方法实践
  • Lovable设计工具从0到1:3天快速搭建高可用原型系统的关键5步法
  • Lovable实时分析延迟低于87ms的底层机制:Flink+向量索引协同优化揭秘
  • 代码知识图谱:让 AI 编码助手拥有“外挂大脑“,Token 消耗直降 57%
  • ProSt:基于隐写术与弗雷德金门的信息论安全外包计算方案
  • 从‘布局视图’到‘数据视图’:一个设置让ArcMap捕捉功能‘起死回生’
  • 治污向治碳深度转型:千亿风口下优质有机废气治理厂家赋能行业精细化升级 - 品牌评测官
  • 3分钟上手Thief摸鱼神器:跨平台办公助手终极指南
  • 如何快速掌握Claude Code:5个技巧让你成为高效开发者
  • 上蔡电瓶安装亲测,安装中的“隐形陷阱”
  • Plant Cell Environment(IF=6.3)▏DAP-seq技术助力揭示三叶草TaUPL21调控根系发育的分子机制
  • 如何在Mac上免费备份微信聊天记录:WeChatExporter完整使用指南
  • 怎么跳过原神的动画——从GitHub小白到一键跳过
  • 5G PDCCH资源调度之CORESET配置实战解析
  • Vite + Vue 3 插件生态实战笔记
  • TOP1 推荐:安徽今日互联科技有限公司 - 行业深度观察C
  • RHFDE:面向SVM的鲁棒异构特征判别嵌入方法在遥感跨域识别中的应用
  • 嵌入式渲染器在机器人SLAM中的应用:从场景重建到导航定位
  • 基于MEMS加速度计与模糊规则的交警手势识别系统设计与实现
  • 提示词工程在 AI Coding 中的实战:如何让模型写出你想要的代码