注意最短路转移的单位元是对角线为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. apache tomcat (catalina)查版本(solaris/unix)

    先进到tomcat的bin目录下(cd /tomcat目录/bin),在执行./version.sh https://blog.csdn.net/vv___/article/details/78653 ...

  2. post方式接口测试(二)_参数化

    一.在postman中可设置环境变量和全局变量 二.设置好后直接在请求中使用: 三.get请求,需要将参数直接出现在URL上,直接点击 Params

  3. python框架之Django(5)-O/RM

    字段&参数 字段与db类型的对应关系 字段 DB Type AutoField integer AUTO_INCREMENT BigAutoField bigint AUTO_INCREMEN ...

  4. CSS中border和outline的区别

    border: border-width:1px; border-style:solid; border-color:#ccc; 可以简写为:border:1ox solid #ccc; outlin ...

  5. 基于容器与微服务架构的Web应用示例eShopOnContainers

    简介 微软官方提供了一个基于Docker和微服务的示例应用eShopOnContainers:它使用了面向服务的架构并且从服务端到客户端都是跨平台的:该架构使用通过http作为客户端与服务端直接的通信 ...

  6. 发布自己的npm包、开源项目

    背景:由于最近在做项目之余想做一些其他的事,所以东找找西找找的,最后决定写一个封装一些常用原型方法的NPM包,但不仅限于此.话不多说,说一下实践过程. 一.注册NPM及如何上传NPM包参考连接:htt ...

  7. Java基础(变量数&常量&据类型&类型转换)

    什么是变量: 变量就是一个不固定的数值,它随时会改变,就像银行卡里存的钱一样会变动. 变量的格式:1  数据类型 变量名=变量值:  2  数据类型 变量名: 变量名=变量值: 变量的三大要素:1变量 ...

  8. 宝岛探险,DFS&BFS

    问题描述: 小哼通过秘密方法得到一张不完整的钓鱼岛航拍地图.钓鱼岛由一个主岛和一些附属岛屿组成,小哼决定去钓鱼岛探险.下面这个10*10的二维矩阵就是钓鱼岛的航拍地图.图中数字表示海拔,0表示海洋,1 ...

  9. OAuth 2.0之授权码模式

    转载自:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth 2.0授权码模式 授权码模式(authorization code)是功 ...

  10. nodejs笔记之搭建服务器

    简单服务器搭建: 1.新建一个文件:app.js 2.加入实现服务器代码: const http = require("http"); http.createServer(func ...