1706: [usaco2007 Nov]relays 奶牛接力跑

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 675  Solved: 352
[Submit][Status][Discuss]

Description

FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目。至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T <= 100)条跑道上。 农场上的跑道有一些交汇点,每条跑道都连结了两个不同的交汇点 I1_i和I2_i(1 <= I1_i <= 1,000; 1 <= I2_i <= 1,000)。每个交汇点都是至少两条跑道的端点。 奶牛们知道每条跑道的长度length_i(1 <= length_i <= 1,000),以及每条跑道连结的交汇点的编号 并且,没有哪两个交汇点由两条不同的跑道直接相连。你可以认为这些交汇点和跑道构成了一张图。 为了完成一场接力跑,所有N头奶牛在跑步开始之前都要站在某个交汇点上(有些交汇点上可能站着不只1头奶牛)。当然,她们的站位要保证她们能够将接力棒顺次传递,并且最后持棒的奶牛要停在预设的终点。 你的任务是,写一个程序,计算在接力跑的起点(S)和终点(E)确定的情况下,奶牛们跑步路径可能的最小总长度。显然,这条路径必须恰好经过N条跑道。

Input

* 第1行: 4个用空格隔开的整数:N,T,S,以及E

* 第2..T+1行: 第i+1为3个以空格隔开的整数:length_i,I1_i,以及I2_i, 描述了第i条跑道。

Output

* 第1行: 输出1个正整数,表示起点为S、终点为E,并且恰好经过N条跑道的路 径的最小长度

Sample Input

2 6 6 4
11 4 6
4 4 8
8 4 9
6 6 8
2 6 9
3 8 9

Sample Output

10

因为题目最多100个点,所以直接离散化,之后建一个100*100的矩阵,

其中jz[i][j]就表示第i个点到第j个点的距离,如果没有这条边,则默认为一个很大的数

答案就是这个矩阵自乘m次,但是矩阵的"乘法"不再是原来的乘法,要修改下规则

原本是a[i][j] = ∑(a[i][k]*a[k][j]) (1<=k<=n), 这里改成a[i][j] = min(a[i][k]+a[k][j])  (1<=k<=n)

是不是很像floyd?

说是矩阵快速幂,其实就是倍增floyd的改版

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct Matrix
{int a[105][105];Matrix(){memset(a, 60, sizeof(a));}
}Matrix;
Matrix Jz;
int n, p[1000005], Hash[105];
Matrix Jzcf(Matrix p1, Matrix p2)
{int i, j, k;Matrix ans;for(i=1;i<=n;i++){for(j=1;j<=n;j++){for(k=1;k<=n;k++)ans.a[i][j] = min(ans.a[i][j], p1.a[i][k]+p2.a[k][j]);}}return ans;
}
Matrix Powto(Matrix x, int y)
{int temp;Matrix ans;temp = 0;while(y){if(y%2==1){if(temp==0)temp = 1, ans = x;elseans = Jzcf(ans, x);}x = Jzcf(x, x);y /= 2;}return ans;
}
int main(void)
{int m, q, s, t, x, y, len;while(scanf("%d%d%d%d", &m, &q, &s, &t)!=EOF){n = 0;memset(p, 0, sizeof(p));while(q--){scanf("%d%d%d", &len, &x, &y);if(p[x]==0)  Hash[++n] = x, p[x] = n;if(p[y]==0)  Hash[++n] = y, p[y] = n;Jz.a[p[x]][p[y]] = Jz.a[p[y]][p[x]] = len;}Jz = Powto(Jz, m);printf("%d\n", Jz.a[p[s]][p[t]]);}return 0;
}

bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑(倍增floyd)相关推荐

  1. 【BZOJ】1706: [usaco2007 Nov]relays 奶牛接力跑

    [题意]给定m条边的无向图,起点s,终点t,要求找出s到t恰好经过n条边的最短路径.n<=10^6,m<=100. [算法]floyd+矩阵快速幂 [题解] 先对点离散化,得到点数N. 对 ...

  2. bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏(floyd)

    1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 715  Solved: 47 ...

  3. bzoj 1642: [Usaco2007 Nov]Milking Time 挤奶时间(DP)

    1642: [Usaco2007 Nov]Milking Time 挤奶时间 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 874  Solved: 5 ...

  4. BZOJ 1707 [Usaco2007 Nov]tanning分配防晒霜

    1707: [Usaco2007 Nov]tanning分配防晒霜 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 810  Solved: 387 [S ...

  5. BZOJ 1640: [Usaco2007 Nov]Best Cow Line 队列变换

    Description FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加"年度最佳老农"的比赛.在比赛中,每个农夫把他的奶牛排成一列,然后准备经过评委检验. 比赛 ...

  6. bzoj 1707: [Usaco2007 Nov]tanning分配防晒霜

    Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...

  7. bzoj 1705: [Usaco2007 Nov]Telephone Wire 架设电话线【dp】

    i的初始化写成2了于是成功查错2h--怕不是个傻子 设f[i][j]为第i根高为j,转移是 \[ f[i][j]=min(f[i-1][k]+abs(k-j)*c+(j-h[i])^2)(j>= ...

  8. BZOJ1706奶牛接力跑

    这个东西思路还是不错的. 解法就是把矩阵幂的加法改成取min,乘法改成加法就好,和floyed是一样的.这样的话,矩阵操作一次就相当于松弛了一次最短路. 建矩阵的过程也比较简单,可以离散化,当然下面有 ...

  9. BZOJ 2085 [Poi2010]Hamsters Hash+倍增floyd

    题意:链接 方法: Hash+倍增floyd 解析: 首先这个BZ的无脑翻译我真是受不了. 加俩条件 所有串的长度总和不超过100000,并且对于任意不同子串A,B,A不包含于B,B不包含于A. 然后 ...

最新文章

  1. gdc服务器老显示drs,VMware ESXi 高可用之drs
  2. python【蓝桥杯vip练习题库】BASIC-3字母图形
  3. MySQL与SQLServer的区别(一千条语句)
  4. elasticsearch实战三部曲之三:搜索操作
  5. ffmpeg+nginx+video实现rtsp流转hls流,通过H5查看监控视频
  6. 计算平方根【牛顿迭代法】
  7. 好玩的问答,看看你的年龄阶段哦
  8. java过去不到空单元格,Java POI。空白时跳过单元格
  9. 安装redis k8s_K8S 生态周报| Docker v19.03.6-rc2 发布
  10. jetty运行web项目
  11. MySQL双主高可用架构之MMM实战
  12. PHP 调用阿里云短信服务API操作短信模板(增删改查)
  13. linux文件映射mmap
  14. 3DMAX烘焙AO步骤
  15. 2018计算机考研大纲408,2018考研计算机408考试大纲.pdf
  16. Mybatis的批量插入数据库的两种方法及代码自动生成工具的使用方法
  17. 数据分析师培训告诉你 三个最常见的数据分析面试方向
  18. flatten(扁平化)数组
  19. Android UI 模板
  20. PHP获取本周的起止时间

热门文章

  1. python和c先学哪个-C和Python我该先学什么?
  2. 震撼上市!北朝鲜语对话语音识别数据库
  3. php修改mysql排序_php – 自定义MySQL排序
  4. mysql duplicate id_mysql 使用ON DUPLICATE KEY UPDATE 时导致的自增主键id无限增大问题
  5. 【数据结构和算法笔记】:稀疏矩阵的存储结构详解
  6. 最简单的基于FFmpeg的移动端例子:Android 推流器
  7. Media Player Classic - HC 源代码分析 1:整体结构
  8. 一个简单的基于 DirectShow 的播放器 1(封装类)
  9. controller层要写什么_别再写满屏的try-catch了,真丑,全局异常处理不会吗?
  10. Map对象与实体类Object对象转换