poj 3613 floyd + 快速幂
题意:本题的大意就是问从S 到 T 经过边得个数恰为k的最短路是多少。
思路:对于邻接矩阵每一次floyd求的是每个点间的最短距离,则n次floyd就是每个点间n条路的最短距离(可以重复边);
但是由于k次floyd时间复杂度会超,则运用了快速幂的方法。
代码:
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#define MAXN 1005
#define MAXM 500005
#define INF 1000000000
using namespace std;
int k, m, s, t;
int ans[MAXN][MAXN], mp[MAXN][MAXN], tmp[MAXN][MAXN], dis[MAXN][MAXN];
int used[MAXN], v[MAXN], num;
void floyd(int c[][MAXN], int a[][MAXN], int b[][MAXN])
{
for(int k = 0; k < num; k++)
for(int i = 0; i < num; i++)
for(int j = 0; j < num; j++)
if(c[v[i]][v[j]] > a[v[i]][v[k]] + b[v[k]][v[j]])
c[v[i]][v[j]] = a[v[i]][v[k]] + b[v[k]][v[j]];
}
void copy(int a[][MAXN], int b[][MAXN])
{
for(int i = 0; i < num; i++)
for(int j = 0; j < num; j++)
{
a[v[i]][v[j]] = b[v[i]][v[j]];
b[v[i]][v[j]] = INF;
}
}
void slove(int k)
{
while(k)
{
if(k & 1)
{
floyd(dis, ans, mp);
copy(ans, dis);
}
floyd(tmp, mp, mp);
copy(mp, tmp);
k >>= 1;
}
}
int main()
{
int x, y, w;
scanf("%d%d%d%d", &k, &m, &s, &t);
for(int i = 0; i <= 1000; i++)
{
for(int j = 0; j <= 1000; j++)
{
mp[i][j] = INF;
tmp[i][j] = INF;
dis[i][j] = INF;
ans[i][j] = INF;
}
ans[i][i] = 0;
}
num = 0;
for(int i = 0; i < m; i++)
{
scanf("%d%d%d", &w, &x, &y);
if(!used[x])
{
used[x] = 1;
v[num++] = x;
}
if(!used[y])
{
used[y] = 1;
v[num++] = y;
}
if(mp[x][y] > w)
mp[x][y] = mp[y][x] = w;
}
slove(k);
printf("%d\n", ans[s][t]);
return 0;
}
poj 3613 floyd + 快速幂的更多相关文章
- POJ 3613 Cow Relays(floyd+快速幂)
http://poj.org/problem?id=3613 题意: 求经过k条路径的最短路径. 思路: 如果看过<矩阵乘法在信息学的应用>这篇论文就会知道 现在我们在邻接矩阵中保存距离, ...
- POJ 3613 floyd+矩阵快速幂
题意: 求s到e恰好经过n边的最短路 思路: 这题已经被我放了好长时间了. 原来是不会矩阵乘法,快速幂什么的也一知半解 现在终于稍微明白了点了 其实就是把矩阵乘法稍微改改 改成能够满足结合律的矩阵&q ...
- poj 1995 裸快速幂
1. poj 1995 Raising Modulo Numbers 2.链接:http://poj.org/problem?id=1995 3.总结:今天七夕,来发水题纪念一下...入ACM这个坑 ...
- poj 3233 矩阵快速幂
地址 http://poj.org/problem?id=3233 大意是n维数组 最多k次方 结果模m的相加和是多少 Given a n × n matrix A and a positive i ...
- poj 3734 Blocks 快速幂+费马小定理+组合数学
题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...
- poj 3734 矩阵快速幂+YY
题目原意:N个方块排成一列,每个方块可涂成红.蓝.绿.黄.问红方块和绿方块都是偶数的方案的个数. sol:找规律列递推式+矩阵快速幂 设已经染完了i个方块将要染第i+1个方块. a[i]=1-i方块中 ...
- POJ 3070 矩阵快速幂解决fib问题
矩阵快速幂:http://www.cnblogs.com/atmacmer/p/5184736.html 题目链接 #include<iostream> #include<cstdi ...
- 解题报告:poj 3070 - 矩阵快速幂简单应用
2017-09-13 19:22:01 writer:pprp 题意很简单,就是通过矩阵快速幂进行运算,得到斐波那契数列靠后的位数 . 这是原理,实现部分就是矩阵的快速幂,也就是二分来做 矩阵快速幂可 ...
- POJ 1995 (快速幂)
这道题普通做法会发生溢出且会超时,应当用快速幂来求解. 快速幂讲解 #include <cstdio> #include <cmath> using namespace std ...
随机推荐
- Spring Boot整合Dubbo使用及开发笔记
一.概述: Spring Dubbo是我开发的一个基于spring-boot和dubbo,目的是使用Spring boot的风格来使用dubbo.(即可以了解Spring boot的启动过程又可以学习 ...
- RabbitMQ入门-Topic模式
上篇<RabbitMQ入门-Routing直连模式>我们介绍了可以定向发送消息,并可以根据自定义规则派发消息.看起来,这个Routing模式已经算灵活的了,但是,这还不够,我们还有更加多样 ...
- 照着官方文档学习react
笨人学习法 10000个小时策略来学习,因为笨.先照着官方文档敲一遍,写一遍. 准备 先要准备环境.搭建一个基于webpack的react环境:Hello ReactJS. demo: https:/ ...
- Jenkins小菜初次使用小记
title: Jenkins自动集成小记 Jenkins是用来自动构建任务的,也许你还不知道什么叫自动构建任务,它的意思是可以针对某个任务进行自动化,比如你开发的某个软件,每次写完代码提交到githu ...
- [NOIP 2010]饮水入城 搜索+贪心
考试的时候写了个dfs找出来了,最后处理的时候想到了贪心,但是正确性没有想通.然后想了想动规,也没想通.最后没办法,用状态的话用了个状压,弄了40分. 正解是bfs+贪心.Dfs也有过的. 下面题解引 ...
- jQuery.extend 使用函数
介绍 jQuery.extend([deep], target, object1, [objectN])用一个或多个其他对象来扩展一个对象,返回被扩展的对象.如果不指定target,则给jQuery对 ...
- js获取select下拉框选中的的值和判断checkbox是否选中状态
html: <select id="lib_select" name=""> <option value="1" ...
- 抛开深层次底层,快速入门SpringMVC
SpringMVC主要有三个核心部分组成,DispatcherServlet.Controller.ViewResolver. DispatcherServlet: 请求输入 ...
- 深入认识XmlReader
深入认识XmlReader 摘要 XmlReader类是组成.NET的关键技术之一,极大地方便了开发人员对Xml的操作.通过本文您将对XmlReader有一个很好的认识,并将其应用到实际开发中. ...
- (译)package.json详解
原文链接 概述 本文囊括了所有package.json文件中你需要知道的细节.注意package.json必须是纯JSON的,而不仅仅是一个JavaScript对象字面量.该文件描述的很多行为都受np ...