poj3613
注意最短路转移的单位元是对角线为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的更多相关文章
- 「POJ3613」Cow Relays
「POJ3613」Cow Relays 传送门 就一个思想:\(N\) 遍 \(\text{Floyd}\) 求出经过 \(N\) 个点的最短路 看一眼数据范围,想到离散化+矩阵快速幂 代码: #in ...
- 疯子的算法总结(九) 图论中的矩阵应用 Part 1+POJ3613 Cow Relays
图的存储有邻接矩阵,那么他就具备一些矩阵的性质,设有一个图的demo[100][100];那么demo[M][N]就是M—>N的距离,若经过一次松弛操作demo[M][N]=demo[M][K] ...
- POJ3613 Cow Relays(矩阵快速幂)
题目大概要求从起点到终点恰好经过k条边的最短路. 离散数学告诉我们邻接矩阵的k次幂就能得出恰好经过k条路的信息,比如POJ2778. 这题也一样,矩阵的幂运算定义成min,而min满足结合律,所以可以 ...
- POJ3613 Cow Relays [矩阵乘法 floyd类似]
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7335 Accepted: 2878 Descri ...
- poj3613(恰经过N条边的最短路)
题目连接:http://poj.org/problem?id=3613 题意:从S 到 T 经过边得个数恰为k的最短路是多少. 分析:01邻接矩阵A的K次方C=A^K,C[i][j]表示i点到j点正好 ...
- 【POJ3613】Cow Relays 离散化+倍增+矩阵乘法
题目大意:给定一个 N 个顶点,M 条边的无向图,求从起点到终点恰好经过 K 个点的最短路. 题解:设 \(d[1][i][j]\) 表示恰好经过一条边 i,j 两点的最短路,那么有 \(d[r+m] ...
- poj3613 Cow Relays【好题】【最短路】【快速幂】
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions:9207 Accepted: 3604 Descrip ...
- POJ3613 k边最短路
题目:http://poj.org/problem?id=3613 Floyd求最短路的实质是矩阵的自乘.( i , k )是第 i 行第k列,( k , j )是第k行第 j 列:用它们的max更新 ...
- [POJ3613] Cow Relays
link 题目大意 给你一个含有边权的无向图,问从$S$到$T$经过$N$条边的最小花费. 试题分析 我们可以很容易推导$dp$方程,$dp(k,i,j)$表示经过$k$条边从$i$到$j$的最小花费 ...
随机推荐
- 【UML】NO.53.EBook.6.UML.2.001-【Thinking In UML 大象 第二版】- 概述
1.0.0 Summary Tittle:[UML]NO.53.EBook.6.UML.2.001-[Thinking In UML 大象 第二版]- 概述 Style:DesignPattern S ...
- Centos安装Oracle及问题处理
安装Oracle前准备 创建运行oracle数据库的系统用户和用户组 [jonathan@localhost ~]$ su root #切换到root Password: [root@localhos ...
- Remove menucool tooltip trial version
You use this crack on your own risk , i dont reserve any right on this script or what is going to af ...
- JAVA:IDEA安装、创建项目、tomcat配置、maven配置(1)
一.安装 JDK安装自行百度,IDEA安装: IDEA安装包下载:https://www.jetbrains.com/idea/download/ 安装过程一路默认,需要选择的就勾选 .java之类的 ...
- vscode/webstorm快捷键
ctrl+/ 单行 [alt+shift+A] 多行注释 (默认的 我已经修改了) 复制当前行:shift + alt +up/down(上下箭头)可以修改成ctrl+d(改成webstorm一 ...
- HBuilder/Mui开发ios使用上拉刷新导致滚动条无法使用的解决方法
HBuilder/Mui开发的APP使用上拉刷新,当滚动到底部是会触发上拉刷新,加载更多数据.但是ios上确是一个坑,导致滚动条无法滚动. 解决方法 放弃Mui的上拉刷新,自己使用JS实现. var ...
- POJ 1986 Distance Queries(LCA Tarjan法)
Distance Queries [题目链接]Distance Queries [题目类型]LCA Tarjan法 &题意: 输入n和m,表示n个点m条边,下面m行是边的信息,两端点和权,后面 ...
- linux----------今天又遇到一个奇葩的问题,就是linux文件的权限已经是777了但是还是没有写入权限,按照下面的命令就解决了
查看SELinux状态: 1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: ...
- 星型数据仓库olap工具kylin介绍和简单使用示例
本文转载自:https://www.cnblogs.com/hsydj/p/4515057.html 星型数据仓库olap工具kylin介绍 星型数据仓库olap工具kylin介绍 数据仓库是目前企业 ...
- Navicate 连接mysql问题
mysql8.0 and Navicate11.2 链接报错问题 亲测有效:记录一下仅供提醒自己 原创: https://blog.csdn.net/xdmfc/article/details/802 ...