洛谷 [P2886] 牛继电器Cow Relays
最短路 + 矩阵快速幂
我们可以改进矩阵快速幂,使得它适合本题
用图的邻接矩阵和快速幂实现
注意 dis[i][i] 不能置为 0
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
using namespace std;
struct edge{
int u, v, dis;
}e[10000];
int n, m, p, ss, tt;
void work() {
int sub[10005];
for(int i = 1; i <= m; i++) {
cin >> e[i].dis >> e[i].u >> e[i].v;
sub[++n] = e[i].u;
sub[++n] = e[i].v;
}
sort(sub + 1, sub + n + 1);
n = unique(sub + 1, sub + n + 1) - sub - 1;
for(int i = 1; i <= m; i++) {
e[i].u = lower_bound(sub + 1, sub + n + 1, e[i].u) - sub;
e[i].v = lower_bound(sub + 1, sub + n + 1, e[i].v) - sub;
}
ss = lower_bound(sub + 1, sub + n + 1, ss) - sub;
tt = lower_bound(sub + 1, sub + n + 1, tt) - sub;
}
struct Matrix{
int num[205][205];
void clear() {
memset(num, 0x3f, sizeof(num));
}
void unit() {
memset(num, 0, sizeof(num));
for(int i = 0; i < 205; i++) num[i][i] = 1;
}
Matrix operator * (const Matrix & b) {
Matrix ans;
ans.clear();
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
for(int k = 1; k <= n; k++) {
ans.num[i][j] = min(ans.num[i][j], num[i][k] + b.num[k][j]);
}
}
}
return ans;
}
void print() {
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
printf("%d ", num[i][j]);
}
printf("\n");
}
}
Matrix operator ^ (int k) {
Matrix ans;
k--;
ans = (*this);
while(k) {
if(k & 1) ans = ans * (*this);
(*this) = (*this) * (*this);
k >>= 1;
}
return ans;
}
};
int main() {
cin >> p >> m >> ss >> tt;
work();
Matrix a;
a.clear();
//for(int i = 1; i <= n; i++) a.num[i][i] = 0;
for(int i = 1; i <= m; i++) {
a.num[e[i].u][e[i].v] = a.num[e[i].v][e[i].u] = min(e[i].dis, a.num[e[i].u][e[i].v]);
}
a = a ^ p;
//a.print();
printf("%d\n", a.num[ss][tt]);
return 0;
}
洛谷 [P2886] 牛继电器Cow Relays的更多相关文章
- [洛谷P2886] 牛继电器Cow Relays
问题描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...
- 洛谷P2886牛继电器
传送门啦 倍增 $ Floyd $ 注意结构体里二维数组不能开到 $ 2000 $ #include <iostream> #include <cstdio> #include ...
- P2886 [USACO07NOV]牛继电器Cow Relays
题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...
- [USACO07NOV]牛继电器Cow Relays (最短路,DP)
题目链接 Solution 非正解 似乎比较蛇啊,先个一个部分分做法,最短路+\(DP\). 在求最短路的堆或者队列中存储元素 \(dis_{i,j}\) 代表 \(i\) 这个节点,走了 \(j\) ...
- 洛谷P2886 [USACO07NOV]牛继电器Cow Relays
题意很简单,给一张图,把基本的求起点到终点最短路改成求经过k条边的最短路. 求最短路常用的算法是dijkstra,SPFA,还有floyd. 考虑floyd的过程: c[i][j]=min(c[i][ ...
- 洛谷 P2886 [USACO07NOV]牛继电器Cow Relays
题面 解题思路 ## floyd+矩阵快速幂,跟GhostCai爷打赌用不用离散化,最后完败..GhostCai真是tql ! 有个巧妙的方法就是将节点重新编号,因为与节点无关. 代码 #includ ...
- [LUOGU] P2886 [USACO07NOV]牛继电器Cow Relays
https://www.luogu.org/problemnew/show/P2886 给定无向连通图,求经过k条边,s到t的最短路 Floyd形式的矩阵乘法,同样满足结合律,所以可以进行快速幂. 离 ...
- luogu题解 P2886 【牛继电器Cow Relays】-经过K边最短路&矩阵
题目链接: https://www.luogu.org/problemnew/show/P2886 Update 6.16 最近看了下<算法导论>,惊奇地发现在在介绍\(APSP\) \( ...
- [USACO07NOV]牛继电器Cow Relays
题目描述 给出一张无向连通图,求S到E经过k条边的最短路. 输入输出样例 输入样例#1: 2 6 6 4 11 4 6 4 4 8 8 4 9 6 6 8 2 6 9 3 8 9 输出样例#1: 10 ...
随机推荐
- 解读express框架
#解读Express 框架 1. package.json文件:express工程的配置文件 2. 为什么可以执行npm start?相当于执行 node ./bin/www "script ...
- linux交换分区调整
SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且 ...
- 作业题:闰年 if((year%4==0&&year%100!=0)||year&400==0)
作业题:闰年 if((year%4==0&&year%100!=0)||year&400==0)
- Linux菜鸟起飞之路【六】权限管理(二)
一.权限信息详解 ls -l 文件 //查看文件权限写法1 ll 文件 //查看文件权限写法2 ls -dl 目录 //查看目录权限写法1 ll -d 目录 //查看目录权限写法2 文件权限格式: ...
- POJ:2586-Y2K Accounting Bug
Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Description Accounting for Computer Machi ...
- STM8 EEPROM心得
对于STM8来说,其内部的EEPROM确实是个不错的东西,而且STM8S103/105价格已经非常便宜了,当然也可以用STM8S003/005代替,而且价格更便宜,大概在,1.2/2.0元左右,比10 ...
- hdu4861 我只能说这是找规律=.=
先说明一下题意,因为开始我就没太读懂,感觉作者不是没交代清楚就是让做题的人自己去领悟,开始我不知道球是可以随便选的,然后那个关系式到底是最后一个数模p,还是整体模P........最后确定是整体模P ...
- hdu 1011 Starship Troopers(树形背包)
Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- BZOJ 2243 染色 树链剖分
题意: 给出一棵树,每个顶点上有个颜色\(c_i\). 有两种操作: C a b c 将\(a \to b\)的路径所有顶点上的颜色变为c Q a b 查询\(a \to b\)的路径上的颜色段数,连 ...
- TCP缓冲区大小及限制
这个问题在前面有的部分已经涉及,这里在重新总结下.主要参考UNIX网络编程. (1)数据报大小IPv4的数据报最大大小是65535字节,包括IPv4首部.因为首部中说明大小的字段为16位.IPv6的数 ...