注意最短路转移的单位元是对角线为0,其它为INF。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <stack>
#include <bitset>
#define mkp make_pair
using namespace std;
const double EPS=1e-;
typedef long long lon;
const lon SZ=,SSZ=*SZ,one=,INF=0x7FFFFFFF,mod=;
int n,m,S,T,mnum;
int mp[SZ][SZ];
struct nd{
int len,bg,fn;
nd(int a=,int b=,int c=):len(a),bg(b),fn(c){}
};
nd arr[SZ];
vector<int> ls; int getid(int x)
{
return lower_bound(ls.begin(),ls.end(),x)-ls.begin()+;
} void init()
{
cin>>n>>m>>S>>T;
for(int i=;i<=m;++i)
{
cin>>arr[i].len>>arr[i].bg>>arr[i].fn;
ls.push_back(arr[i].bg);
ls.push_back(arr[i].fn);
}
sort(ls.begin(),ls.end());
ls.erase(unique(ls.begin(),ls.end()),ls.end());
mnum=ls.size();
for(int i=;i<=mnum;++i)
{
for(int j=;j<=mnum;++j)
{
// if(i==j)mp[i][j]=0;
// else
mp[i][j]=(<<);
}
}
for(int i=;i<=m;++i)
{
int bg=getid(arr[i].bg);
int fn=getid(arr[i].fn);
mp[bg][fn]=mp[fn][bg]=arr[i].len;
}
} void mul(int dst[][SZ],int x[][SZ],int y[][SZ])
{
int res[SZ][SZ];
memset(res,0x3f,sizeof(res));
// for(int i=1;i<=mnum;++i)
// {
// for(int j=1;j<=mnum;++j)
// {
// res[i][j]=(1<<29);
// }
// }
for(int i=;i<=mnum;++i)
{
for(int j=;j<=mnum;++j)
{
for(int k=;k<=mnum;++k)
{
res[i][j]=min(res[i][j],x[i][k]+y[k][j]);
}
}
}
for(int i=;i<=mnum;++i)
{
for(int j=;j<=mnum;++j)
{
dst[i][j]=res[i][j];
}
}
} void work()
{
int res[SZ][SZ],ele[SZ][SZ];
memset(res,0x3f,sizeof(res));
for(int i=;i<=mnum;++i)res[i][i]=;
memcpy(ele,mp,sizeof(mp));
for(;n;n/=)
{
if(n&)mul(res,res,ele);
mul(ele,ele,ele);
}
S=getid(S),T=getid(T);
cout<<res[S][T]<<endl;
} int main()
{
std::ios::sync_with_stdio();
//freopen("d:\\1.txt","r",stdin);
int casenum;
//cin>>casenum;
//cout<<casenum<<endl;
//for(int time=1;time<=casenum;++time)
//for(int time=1;cin>>n>>m;++time)
{
//printf("Case #%d:\n",time);
init();
work();
}
return ;
}

poj3613的更多相关文章

  1. 「POJ3613」Cow Relays

    「POJ3613」Cow Relays 传送门 就一个思想:\(N\) 遍 \(\text{Floyd}\) 求出经过 \(N\) 个点的最短路 看一眼数据范围,想到离散化+矩阵快速幂 代码: #in ...

  2. 疯子的算法总结(九) 图论中的矩阵应用 Part 1+POJ3613 Cow Relays

    图的存储有邻接矩阵,那么他就具备一些矩阵的性质,设有一个图的demo[100][100];那么demo[M][N]就是M—>N的距离,若经过一次松弛操作demo[M][N]=demo[M][K] ...

  3. POJ3613 Cow Relays(矩阵快速幂)

    题目大概要求从起点到终点恰好经过k条边的最短路. 离散数学告诉我们邻接矩阵的k次幂就能得出恰好经过k条路的信息,比如POJ2778. 这题也一样,矩阵的幂运算定义成min,而min满足结合律,所以可以 ...

  4. POJ3613 Cow Relays [矩阵乘法 floyd类似]

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7335   Accepted: 2878 Descri ...

  5. poj3613(恰经过N条边的最短路)

    题目连接:http://poj.org/problem?id=3613 题意:从S 到 T 经过边得个数恰为k的最短路是多少. 分析:01邻接矩阵A的K次方C=A^K,C[i][j]表示i点到j点正好 ...

  6. 【POJ3613】Cow Relays 离散化+倍增+矩阵乘法

    题目大意:给定一个 N 个顶点,M 条边的无向图,求从起点到终点恰好经过 K 个点的最短路. 题解:设 \(d[1][i][j]\) 表示恰好经过一条边 i,j 两点的最短路,那么有 \(d[r+m] ...

  7. poj3613 Cow Relays【好题】【最短路】【快速幂】

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:9207   Accepted: 3604 Descrip ...

  8. POJ3613 k边最短路

    题目:http://poj.org/problem?id=3613 Floyd求最短路的实质是矩阵的自乘.( i , k )是第 i 行第k列,( k , j )是第k行第 j 列:用它们的max更新 ...

  9. [POJ3613] Cow Relays

    link 题目大意 给你一个含有边权的无向图,问从$S$到$T$经过$N$条边的最小花费. 试题分析 我们可以很容易推导$dp$方程,$dp(k,i,j)$表示经过$k$条边从$i$到$j$的最小花费 ...

随机推荐

  1. 【转】Windows下Python快速解决error: Unable to find vcvarsall.bat

    转自:http://blog.csdn.net/sad_sugar/article/details/73743863 系统配置:Windows10 x64, Visual Studio 2017, P ...

  2. Fiddler_内置命令行_03

    Fiddler左下角有一个命令框  [基础命令] [举例说明] ? 回车之后,匹配的内容如下图 stop [断点命令] FIddler断点功能就是将请求截获下来,但是不发送,这个时候你可以干很多事情, ...

  3. HDFS,MapReduce,Hive,Hbase 等之间的关系

    HDFS: HDFS是GFS的一种实现,他的完整名字是分布式文件系统,类似于FAT32,NTFS,是一种文件格式,是底层的. Hive与Hbase的数据一般都存储在HDFS上.Hadoop HDFS为 ...

  4. python之wtforms组件

    作用 生成 HTML 表单. form 表单验证. 基本使用 安装 pip3 install wtforms 示例 登录 from flask import Flask, render_templat ...

  5. window.onload和jquery等待加载的区别

    1.区别 window.onload是等待页面所有文档,图片等元素都加载完成再进行操作,是javascript原生语法. jquery是等待页面文档加载完成时,就进行操作. $(function(){ ...

  6. 【JVM】-NO.115.JVM.1 -【JDK11 HashMap详解-4-伸展树、B树】

    .Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  7. npm 发布一个全局的指令

    我们经常使用 npm i  -g  xxxx 安装完成一个包之后,就能直接使用对应的指令.例如安装  vue-cli 或者 express 等 那么下面我们自己做一个类似的效果: 首先要对 npm 发 ...

  8. Docker:从引擎和运行框架理解Docker(3)

    Docker是GO语言编写的. 1.Docker发挥的作用: 1.快速.一致.标准化的交付应用.从开发.测试.到部署交付到成产环境都可以使用docker命令处理image到不同的环境 2.部署和扩展: ...

  9. Qt 快捷键 复制当前行 向上复制 && 向下复制

    网上的答案不一,我的快捷键是默认的配置,未做过修改. 向前复制当前行: Ctrl + Alt + up (向上箭头) 向后复制当前行:Ctrl + Alt + down(向下箭头) 补充一个:Ctrl ...

  10. qrCode二维码字符串长度太多压缩的问题

    昨天整微信的扫码支付时,用qrcode生成二维码,结果字符串太长而失败.今天发现利用pako压缩,可扫描后显示乱码,特记录一下. palo插件地址:https://github.com/nodeca/ ...