POJ 3613
可以利用DP的思想来做,不过是在DP时加上了矩阵乘法的思想而已,但乘法不是真的乘法,而是mp[a][i]+mp[i][b]<mp[a][b]则更新,其实更像FLOYD。
但这是符合乘法的格式的。
我们可以利用快速幂的做法来降低复杂度,同时把那些点离散化一下,因为T才100,最多是200多个点而已。
仅有此还不够,我觉得这道题更重要的是一个初始化的问题。
这题的数据可能有回到原点的数据,那么,若I->I=0的话,则会一直不动,所以要初始化到I->I=INF;
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std;
const int inf=0x3f3f3f3f;
const int Maxn=220;
int mark[1010]; struct Matrax {
int m[Maxn][Maxn];
};
Matrax a;
int counted=0;
Matrax multi(Matrax a,Matrax b){
Matrax c;
for(int i=0;i<counted;i++){
for(int j=0;j<counted;j++){
c.m[i][j]=inf;
for(int k=0;k<counted;k++)
c.m[i][j]=min(c.m[i][j],a.m[i][k]+b.m[k][j]);
}
}
return c;
} Matrax Powerg(int k){
bool flag=false;
Matrax ans,p=a;
while(k){
if(k&1){
if(!flag){
ans=p;
flag=true;
}
else {
ans=multi(ans,p);
}
}
k>>=1;
p=multi(p,p);
}
return ans;
} int main(){
int n,t,s,e,l,u,v,uu,vv;
while(scanf("%d%d%d%d",&n,&t,&s,&e)!=EOF){
counted=0;
memset(mark,-1,sizeof(mark));
for(int i=0;i<Maxn;i++){
for(int j=0;j<Maxn;j++){
a.m[i][j]=inf;
}
}
for(int i=0;i<t;i++){
scanf("%d%d%d",&l,&uu,&vv);
if(mark[uu]==-1)
mark[uu]=counted++;
if(mark[vv]==-1)
mark[vv]=counted++;
u=mark[uu]; v=mark[vv];
a.m[u][v]=a.m[v][u]=l;
}
Matrax ans=Powerg(n);
s=mark[s]; e=mark[e];
printf("%d\n",ans.m[s][e]);
}
return 0;
}
POJ 3613的更多相关文章
- Poj 3613 Cow Relays (图论)
Poj 3613 Cow Relays (图论) 题目大意 给出一个无向图,T条边,给出N,S,E,求S到E经过N条边的最短路径长度 理论上讲就是给了有n条边限制的最短路 solution 最一开始想 ...
- poj 3613 经过k条边最短路 floyd+矩阵快速幂
http://poj.org/problem?id=3613 s->t上经过k条边的最短路 先把1000范围的点离散化到200中,然后使用最短路可以使用floyd,由于求的是经过k条路的最短路, ...
- poj 3613(经过N条边的最短路)
题目链接:http://poj.org/problem?id=3613 思路:我们知道如果矩阵A表示经过1条边的方案数,那么A^N矩阵就代表这经过N条边的方案数,而本题中要求经过N条边的最短距离,于是 ...
- POJ 3613 Cow Relays(floyd+快速幂)
http://poj.org/problem?id=3613 题意: 求经过k条路径的最短路径. 思路: 如果看过<矩阵乘法在信息学的应用>这篇论文就会知道 现在我们在邻接矩阵中保存距离, ...
- POJ 3613 Cow Relays 恰好n步的最短路径
http://poj.org/problem?id=3613 题目大意: 有T条路.从s到e走n步,求最短路径. 思路: 看了别人的... 先看一下Floyd的核心思想: edge[i][j]=min ...
- POJ 3613 Cow Relays【k边最短路】
题目链接:http://poj.org/problem?id=3613 题目大意: 给出n头牛,t条有向边,起点以及终点,限制每头牛放在一个点上,(一个点上可以放多头牛),从起点开始进行接力跑到终点, ...
- poj 3613 Cow Relays
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5411 Accepted: 2153 Descri ...
- POJ --- 3613 (K步最短路+矩阵快速幂+floyd)
Cow Relays Description For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided ...
- poj 3613 floyd + 快速幂
题意:本题的大意就是问从S 到 T 经过边得个数恰为k的最短路是多少. 思路:对于邻接矩阵每一次floyd求的是每个点间的最短距离,则n次floyd就是每个点间n条路的最短距离(可以重复边); 但是由 ...
- Cow Relays POJ - 3613 (floyd+快速幂)
For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race usin ...
随机推荐
- luogu2437 蜜蜂路线
题目大意 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N,M<N,有多少种爬行路线?M,N<=1000 题解 看到M ...
- 线性回归模型之LinearRegression和SGDRegressor
用美国波士顿的房价数据来介绍如何使用LR和SGDR模型进行预测 # 从sklearn.datasets导入波士顿房价数据读取器. from sklearn.datasets import load_b ...
- linux 在线实验
https://www.shiyanlou.com/courses/running/2
- Mybatis中resultMap的作用-解决实体类属性名和数据库字段不一致
解决实体类属性名和数据库字段不一致
- NOIP2013T1 转圈游戏 快速幂
描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, --, 依此 ...
- 4.Projects and Scenes介绍
1.Project 一个项目是由一系列的文件(如图片.音频.几何).场景以及vzp文件组成.这些文件被导入到项目对应的文件夹中.项目外部资源在场景中被使用后,会导入项目中,除非该资源被标记为外部引用. ...
- 微信小程序怎么开发(小程序开发文档)
微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 2017年1月9日~2018年1月9日,小程序正式上线一周年.上线以来,小程序不断地释放新能力, ...
- 12) 十分钟学会android--APP通信传递消息之简单数据传输
程序间可以互相通信是Android程序中最棒的功能之一.当一个功能已存在于其他app中,且并不是本程序的核心功能时,完全没有必要重新对其进行编写. 本章节会讲述一些通在不同程序之间通过使用Intent ...
- Scala 大数据 常用算法收集
一:IP转数字,用于比大小,用在求IP段范围中 def ip2Long(ip: String): Long = { val fragments = ip.split("[.]") ...
- Session和Cookie对比详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...