传送门

矩阵快速幂,本质是floyd

把 * 改成 + 即可

注意初始化

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

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #define N 101
  5. #define min(x, y) ((x) < (y) ? (x) : (y))
  6.  
  7. int n, t, s, e, cnt;
  8. int x[N], y[N], z[N], a[N];
  9.  
  10. struct Matrix
  11. {
  12. int n, m;
  13. int a[N][N];
  14. Matrix()
  15. {
  16. n = m = 0;
  17. memset(a, 63, sizeof(a));
  18. }
  19. };
  20.  
  21. inline Matrix operator * (Matrix x, Matrix y)
  22. {
  23. int i, j, k;
  24. Matrix ans;
  25. ans.n = x.n;
  26. ans.m = y.m;
  27. for(i = 1; i <= x.n; i++)
  28. for(j = 1; j <= y.m; j++)
  29. for(k = 1; k <= y.n; k++)
  30. ans.a[i][j] = min(ans.a[i][j], x.a[i][k] + y.a[k][j]);
  31. return ans;
  32. }
  33.  
  34. inline Matrix operator ^ (Matrix x, int y)
  35. {
  36. int i;
  37. Matrix ans;
  38. ans.n = ans.m = cnt;
  39. for(i = 1; i <= cnt; i++) ans.a[i][i] = 0;
  40. for(; y; y >>= 1)
  41. {
  42. if(y & 1) ans = ans * x;
  43. x = x * x;
  44. }
  45. return ans;
  46. }
  47.  
  48. int main()
  49. {
  50. int i;
  51. Matrix sum;
  52. scanf("%d %d %d %d", &n, &t, &s, &e);
  53. a[++cnt] = s;
  54. a[++cnt] = e;
  55. for(i = 1; i <= t; i++)
  56. {
  57. scanf("%d %d %d", &z[i], &x[i], &y[i]);
  58. a[++cnt] = x[i];
  59. a[++cnt] = y[i];
  60. }
  61. std::sort(a + 1, a + cnt + 1);
  62. cnt = std::unique(a + 1, a + cnt + 1) - (a + 1);
  63. sum.n = sum.m = cnt;
  64. for(i = 1; i <= t; i++)
  65. {
  66. x[i] = std::lower_bound(a + 1, a + cnt + 1, x[i]) - a;
  67. y[i] = std::lower_bound(a + 1, a + cnt + 1, y[i]) - a;
  68. sum.a[x[i]][y[i]] = z[i];
  69. sum.a[y[i]][x[i]] = z[i];
  70. }
  71. sum = sum ^ n;
  72. s = std::lower_bound(a + 1, a + cnt + 1, s) - a;
  73. e = std::lower_bound(a + 1, a + cnt + 1, e) - a;
  74. printf("%d\n", sum.a[s][e]);
  75. return 0;
  76. }

  

[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. D. Tavas and Malekas DFS模拟 + kmp + hash || kmp + hash

    http://codeforces.com/contest/535/problem/D 如果真的要把m个串覆盖上一个串上面,是可以得,不会超时. 要注意到一点,全部覆盖后再判断时候合法,和边放边判断, ...

  2. Ionic之增加样式会自动换行解决方案

    设置样式的时候,引用自身的样式,能正常显示,但是引用自定义样式显示的时候,竟然或自动换行,好尴尬. 原本代码: $('.codeSuccess').css({'display':'block'}); ...

  3. RabbitMQ十:重要方法简述(参数)

    主要方法 前言 经过前面的学习,RabbitMQ 已经拙见有一定认识和了解,今天主要针对我们在前面学习方法进行一次小总结,本篇文章也想在开头写的,但是后来考虑,如果我都把方法都一一列举,我想大家都没很 ...

  4. oracle常用数据类型&约束条件(及案例)

    一.数据类型 数据类型 说明 数字 number [小数,整数] number(5,3)表示总共5个数字,小数点后3个,最大值99.999 number(5) 表示整数  最大值99999    字符 ...

  5. viewport实现html页面动态缩放/meta viewport/viewport

    页面默认缩放比例为1,最小宽度为375px,在小于375px出现水平滚动条的时候重新计算显示比例缩小界面, <!DOCTYPE html> <html lang="en&q ...

  6. Android性能分析工具Profile GPU rendering详细介绍

    如何在一个应用中追踪和定位性能问题,甚至在没有它的源代码的情况下?? “Profile GPU rendering”(GPU渲染分析),一款Android4.1所引入的工具.你可以在“设置”应用的“开 ...

  7. RxJava尝试取代Handler初探

    在之前的一篇文章中,我们探究了RxJava的使用方法,详细请看https://www.cnblogs.com/yanyojun/p/9745675.html 根据扔物线大神的描述,如果用一个词来概括R ...

  8. Azure PowerShell 在ARM环境下使用指定 vhd(本地化后的磁盘) 来创建虚拟机

    #此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...

  9. codevs 1316 文化之旅 2012年NOIP全国联赛普及组

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文 ...

  10. 使用Recast.AI创建具有人工智能的聊天机器人

    很多SAP顾问朋友们对于人工智能/机器学习这个话题非常感兴趣,也在不断思考如何将这种新技术和SAP传统产品相结合.Jerry之前的微信公众号文章C4C和微信集成系列教程曾经介绍了Partner如何利用 ...