Floyd+限制路径步数(快速幂优化)
2024-08-25 21:26:50
最短路可以采用Floyd来计算,但是限制时间在1s内,估计直接写会超时,所以要用到快速幂来优化。
快速幂的思想是:xy=xy/2∗2" role="presentation" style="position: relative;">xy=xy/2∗2xy=xy/2∗2 所以每次划分下去寻找最短路
(其实我也没完全想清楚,就不讲太清楚了,怕讲错)
//STATUS:C++_AC_125MS_1204KB
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
#define LL __int64
#define pii pair<int,int>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N=210,M=1000000,INF=0x3f3f3f3f,MOD=1999997;
const LL LLNF=0x3f3f3f3f3f3f3f3fLL;
const double DNF=100000000;
int f[N*10],w[N][N];
int nt,n,m,s,t;
struct Matrix{
int ma[N][N];
Matrix friend operator * (const Matrix a,const Matrix b){
Matrix ret;
mem(ret.ma,0x3f);
int i,j,k;
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a.ma[i][k]+b.ma[k][j]<ret.ma[i][j])
ret.ma[i][j]=a.ma[i][k]+b.ma[k][j];
return ret;
}
}mta,mtb;
int pow(int k)
{
mem(mtb.ma,0x3f);
for(int i=0;i<n;i++)mtb.ma[i][i]=0;
while(k){
if(k&1)mtb=mtb*mta;
mta=mta*mta;
k>>=1;
}
return mtb.ma[f[s]][f[t]];
}
int main()
{
// freopen("in.txt","r",stdin);
int i,a,b,c;
while(~scanf("%d%d%d%d",&nt,&m,&s,&t))
{
n=0;
mem(f,-1);
mem(mta.ma,0x3f);
for(i=0;i<m;i++){
scanf("%d%d%d",&c,&a,&b);
if(f[a]==-1)f[a]=n++;
if(f[b]==-1)f[b]=n++;
mta.ma[f[a]][f[b]]=mta.ma[f[b]][f[a]]=Min(mta.ma[f[a]][f[b]],c);
}
printf("%d\n",pow(nt));
}
return 0;
}
最新文章
- SAP CRM 显示消息/在消息中进行导航
- NOIP2016游记
- jQuery弹出窗口浏览图片
- CentOS下通过yum安装svn及配置
- java类型占用字节数&;类型转换
- C#的OpenFileDialog和SaveFileDialog的常见用法(转)
- 为什么p标签不能嵌套div??
- Cordic 算法之 反正切
- Object-c学习之路十一(NSDate和反射)
- 【bzoj3998】 TJOI2015—弦论
- Egret学习笔记 (Egret打飞机-2.开始游戏)
- docker-compose.yml 配置文件详解及项目发布
- 基于UML网络教学管理平台模型的搭建
- Android Framework源码反编译
- javascript_函数式_链式编程
- CentOS 65 安装vmware tools 杂记
- Linux上安装设置mysql 5.7.24
- SQL Server学习记录之获取每月每季度每年第一天和最后一天
- Linux用户、组帐号和权限(学习笔记九)
- 源码管理--llorch的Visual Studio基本教程(四)
热门文章
- Windows平台下Git(gitblit)服务器搭建
- VC++ 2010编译错误 fatal error C1189 error This file requires _WIN32_WINNT to be #defined at least
- ubuntu安装nginx时提示error: the HTTP rewrite module requires the PCRE library
- Java线程池的简单使用
- 找不到方法 Void Newtonsoft.Json.JsonConvert.set_DefaultSettings
- OpenvSwitch代码分析之bridge和port
- 嵌入式开发之davinci---IPIPE、IPIPEIF and ISIF这三者有什么区别
- ASP.NET MVC 提供与访问 Web Api
- ie6不支持png图片的解决办法
- YTU 1020: I think it