传送门

矩阵快速幂,本质是floyd

把 * 改成 + 即可

注意初始化

因为只有100条边,所以可以离散化

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 101
#define min(x, y) ((x) < (y) ? (x) : (y)) int n, t, s, e, cnt;
int x[N], y[N], z[N], a[N]; struct Matrix
{
int n, m;
int a[N][N];
Matrix()
{
n = m = 0;
memset(a, 63, sizeof(a));
}
}; inline Matrix operator * (Matrix x, Matrix y)
{
int i, j, k;
Matrix ans;
ans.n = x.n;
ans.m = y.m;
for(i = 1; i <= x.n; i++)
for(j = 1; j <= y.m; j++)
for(k = 1; k <= y.n; k++)
ans.a[i][j] = min(ans.a[i][j], x.a[i][k] + y.a[k][j]);
return ans;
} inline Matrix operator ^ (Matrix x, int y)
{
int i;
Matrix ans;
ans.n = ans.m = cnt;
for(i = 1; i <= cnt; i++) ans.a[i][i] = 0;
for(; y; y >>= 1)
{
if(y & 1) ans = ans * x;
x = x * x;
}
return ans;
} int main()
{
int i;
Matrix sum;
scanf("%d %d %d %d", &n, &t, &s, &e);
a[++cnt] = s;
a[++cnt] = e;
for(i = 1; i <= t; i++)
{
scanf("%d %d %d", &z[i], &x[i], &y[i]);
a[++cnt] = x[i];
a[++cnt] = y[i];
}
std::sort(a + 1, a + cnt + 1);
cnt = std::unique(a + 1, a + cnt + 1) - (a + 1);
sum.n = sum.m = cnt;
for(i = 1; i <= t; i++)
{
x[i] = std::lower_bound(a + 1, a + cnt + 1, x[i]) - a;
y[i] = std::lower_bound(a + 1, a + cnt + 1, y[i]) - a;
sum.a[x[i]][y[i]] = z[i];
sum.a[y[i]][x[i]] = z[i];
}
sum = sum ^ n;
s = std::lower_bound(a + 1, a + cnt + 1, s) - a;
e = std::lower_bound(a + 1, a + cnt + 1, e) - a;
printf("%d\n", sum.a[s][e]);
return 0;
}

  

[luoguP2886] [USACO07NOV]牛继电器Cow Relays(矩阵)的更多相关文章

  1. P2886 [USACO07NOV]牛继电器Cow Relays

    题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

  2. [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 ...

  3. 洛谷P2886 [USACO07NOV]牛继电器Cow Relays

    题意很简单,给一张图,把基本的求起点到终点最短路改成求经过k条边的最短路. 求最短路常用的算法是dijkstra,SPFA,还有floyd. 考虑floyd的过程: c[i][j]=min(c[i][ ...

  4. [LUOGU] P2886 [USACO07NOV]牛继电器Cow Relays

    https://www.luogu.org/problemnew/show/P2886 给定无向连通图,求经过k条边,s到t的最短路 Floyd形式的矩阵乘法,同样满足结合律,所以可以进行快速幂. 离 ...

  5. 洛谷 P2886 [USACO07NOV]牛继电器Cow Relays

    题面 解题思路 ## floyd+矩阵快速幂,跟GhostCai爷打赌用不用离散化,最后完败..GhostCai真是tql ! 有个巧妙的方法就是将节点重新编号,因为与节点无关. 代码 #includ ...

  6. Luogu 2886 [USACO07NOV]牛继电器Cow Relays

    BZOJ 1706权限题. 倍增$floyd$. 首先这道题有用的点最多只有$200$个,先离散化. 设$f_{p, i, j}$表示经过$2^p$条边从$i$到$j$的最短路,那么有转移$f_{p, ...

  7. [USACO07NOV]牛继电器Cow Relays (最短路,DP)

    题目链接 Solution 非正解 似乎比较蛇啊,先个一个部分分做法,最短路+\(DP\). 在求最短路的堆或者队列中存储元素 \(dis_{i,j}\) 代表 \(i\) 这个节点,走了 \(j\) ...

  8. luogu题解 P2886 【牛继电器Cow Relays】-经过K边最短路&矩阵

    题目链接: https://www.luogu.org/problemnew/show/P2886 Update 6.16 最近看了下<算法导论>,惊奇地发现在在介绍\(APSP\) \( ...

  9. [洛谷P2886] 牛继电器Cow Relays

    问题描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

随机推荐

  1. archsummit_bj2016

    http://bj2016.archsummit.com/schedule 大会日程 2016年12月02日,星期五 7:45-9:00 签到 8:45-9:00 开始入场 9:00-9:30 开场致 ...

  2. python工具之日志记录

    ''' 写日志类 日志存放目录为当前应用程序的目录下的log目录中 日志产生规则:每小时产生一个文件 write by :wujf 2017-02-24 ''' import sys import o ...

  3. 【学习笔记】一:JavaScript简介

    1.JavaScript简史 1)JavaScript最初的功能只是用来在客户端做简单的输入验证器,减少客户端与服务器端的数据交互(毕竟那个年代网速有限). 2)JavaScript的飞速发展及Net ...

  4. php 生成饼状图,折线图,条形图 通用类

    生成饼状图,折线图,条形图通用的php类,这里使用的是百度 Echart. Echart 官方网站  http://echarts.baidu.com/ <?php class Echarts ...

  5. ios MD5大小写加密

    #import "NSString+change.h" #import <CommonCrypto/CommonDigest.h> @implementation NS ...

  6. 浅析 innerHTML 性能优化的原理

    浅析 innerHTML 性能优化的原理 博客分类: web前端 IEAndroidwebkit浏览器UI  昨天看了 lveyo老兄的"innerHTML的性能问题" 一文 ht ...

  7. C++:new的使用

    这里先开个头,以后做详细补充个: new 分配内存失败后会返回空指针:

  8. web.config中配置数据库连接的两种方式

    在ASP.NET中有两种配置数据库连接代码的方式,它们分别是 appSettings 和 connectionStrings .在使用 appSettings 和 connectionStrings ...

  9. OpenCV2:第六章 图像几何变换

    一.简介 图像的几何变换有距离变换 坐标映射 平移  镜像 旋转  缩放  仿射变换等 二.重映射 把一张图像重新排列像素,比如倒置 CV_EXPORTS_W void remap( InputArr ...

  10. windows cmd color颜色设置

    上一篇我们讲了去模仿电影黑客的命令界面,其中有关于cmd命令行的颜色设置,下面就细说一下: 1.cmd进入命令 2.color+空格+?    系统会给与相关提示: 3.可以看出颜色是一个十六进制控制 ...