注意最短路转移的单位元是对角线为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. Attention模型

    李宏毅深度学习 https://www.bilibili.com/video/av9770302/?p=8 Generation 生成模型基本结构是这样的, 这个生成模型有个问题是我不能干预数据生成, ...

  2. JDBC事务(二)转账示例

    示例采用三层框架 web层: package cn.sasa.web; import java.io.IOException; import javax.servlet.ServletExceptio ...

  3. Java 基础 IO流

    一,前言 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 二,字节流 2.1 字节输出流 OutputStrea ...

  4. 【LeetCode每天一题】Merge Intervals(合并区间)

    Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6],[8, ...

  5. 图片居中table-cell

  6. json.dumps与json.dump的区别 json.loads与json.load的区别

    json.dumps是将一个Python数据类型列表进行json格式的编码解析, 示例如下: >>> import json #导入python 中的json模块>>&g ...

  7. dedecms织梦(一)

    网站动静态转换 织梦后台--->系统--->系统设置--->SQL命令行工具 1.将网站所有栏目设置成动态页 update dede_arctype set isdefault=-1 ...

  8. GreenDao 使用和数据库升级

    1使用方法 一.添加依赖 在bulid.gradle文件下的dependencies下添加所需依赖   compile 'org.greenrobot:greendao:3.2.2' // add l ...

  9. Windbg程序调试系列1-Mex扩展使用总结

    最近一直在频繁使用Windbg做线上Dump调试,与微软做Case交流的时候,发现微软CSS团队,用了一个非常效率的Windbg 插件,Mex: 使用介绍: https://blogs.msdn.mi ...

  10. websocket 二合一

    server from flask import Flask, request, render_template from geventwebsocket.handler import WebSock ...