这个东西思路还是不错的。

解法就是把矩阵幂的加法改成取min,乘法改成加法就好,和floyed是一样的。这样的话,矩阵操作一次就相当于松弛了一次最短路。

建矩阵的过程也比较简单,可以离散化,当然下面有另一种更优秀的打法,可以借鉴一下。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<stack>
using namespace std;
int read(){
int sum=,f=;char x=getchar();
while(x<''||x>''){
if(x=='-') f=-;
x=getchar();
}while(x>=''&&x<=''){
sum=sum*+x-'';
x=getchar();
}return sum*f;
}
int k,m,s,e,num;
int id[];
struct Matrix{
int x[][];
void add(int a,int b,int c){
x[a][b]=c;
return ;
}
friend Matrix operator * (Matrix a,Matrix b){
Matrix c;
memset(c.x,0x3f,sizeof(c.x));
for(int i=;i<=num;i++)
for(int j=;j<=num;j++)
for(int k=;k<=num;k++)
c.x[i][j]=min(c.x[i][j],a.x[i][k]+b.x[k][j]);
return c;
}
void db(){
cout<<endl;
for(int i=;i<=num;i++){
for(int j=;j<=num;j++)
cout<<x[i][j]<<" ";
cout<<endl;
}
}
void put(int a,int b){
printf("%d",x[a][b]);
return ;
}
}a;
void qpow(int k){
Matrix c=a,b=a;
// b.db();
for(;k;k>>=,b=b*b)
if(k&) c=c*b;
// c.db();
a=c;
}
int main(){
k=read();m=read();s=read();e=read();
memset(a.x,0x3f,sizeof(a.x));
for(int i=,x,y,z;i<=m;i++){
z=read();x=read();y=read();
id[x]=id[x]?id[x]:++num;
id[y]=id[y]?id[y]:++num;
a.add(id[x],id[y],z);
a.add(id[y],id[x],z);
}
// a.db();
qpow(k-);
// a.db();
a.put(id[s],id[e]);
return ;
}

这种打法是直接用a做的初始矩阵,根据An=A*An-1做的操作,因为一开始不太清楚单位矩阵是谁。

后来想通了,以前的单位矩阵之所以是那样的,是因为单位矩阵的定义是另一个矩阵乘完该矩阵还是原矩阵,以前的之所以是对角线全是1,是因为通过矩阵乘后这个矩阵可以满足单位矩阵性质。

那么这个题的单位矩阵是正无穷矩阵,因为该任何一个矩阵乘完该矩阵还是原矩阵(因为取min嘛)。

BZOJ1706奶牛接力跑的更多相关文章

  1. [bzoj1706]奶牛接力跑 题解 (矩阵快速幂(或者叫倍增Floyd?))

    Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T < ...

  2. 【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑 矩阵乘法

    [BZOJ1706][usaco2007 Nov]relays 奶牛接力跑 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项 ...

  3. 【BZOJ】【1046】/【POJ】【3613】【USACO 2007 Nov】Cow Relays 奶牛接力跑

    倍增+Floyd 题解:http://www.cnblogs.com/lmnx/archive/2012/05/03/2481217.html 神题啊= =Floyd真是博大精深…… 题目大意为求S到 ...

  4. BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德

    BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们 ...

  5. 「题解」:[线性代数]:relays 奶牛接力跑

    问题: relays 奶牛接力跑 时间限制: 1 Sec  内存限制: 256 MB 题面 题目描述 FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼 ...

  6. 【bzoj1706】[usaco2007 Nov]relays 奶牛接力跑 离散化+倍增Floyd

    题目描述 FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T <= 100) ...

  7. bzoj1706 relays 奶牛接力跑 线性代数

    题目描述 FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T <= 100) ...

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

    Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T < ...

  9. bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑——倍增floyd

    Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T < ...

随机推荐

  1. GridView直接打印

    /// <summary> /// 打印功能 /// </summary> /// <param name="panel">打印控件</p ...

  2. 【原创】大叔经验分享(73)scala akka actor

    import java.util.concurrent.{ExecutorService, Executors, TimeUnit} import akka.actor.{Actor, ActorSy ...

  3. ython实现进程间的通信有Queue,Pipe,Value+Array等,其中Queue实现多个进程间的通信,而Pipe实现两个进程间通信,而Value+Array使用得是共享内存映射文件的方式,所以速度比较快

    1.Queue的使用 from multiprocessing import Queue,Process import os,time,random #添加数据函数 def proc_write(qu ...

  4. 用帝国cms 反馈内容的时候自动发送邮箱开发流程

    开发流程是这样的. 第一步:先找好一个发送的邮箱.以及一个接受的邮箱.这里是 测试的,我都用的qq邮箱,帝国cms后台配置如下: 注意:这里的SMTP服务器是腾讯的,如果你用163的或者其他的请自行百 ...

  5. day06 Python class基础篇

    一.目录 1.类与对象的概述 2.封装 3.继承 4.多态 5.类的成员 6.类与类之间的关系 7.私有 二. 内容讲解 一.类与对象的概述 类是对一系列具有相同属性的事物的抽象,相同于设计图纸,而对 ...

  6. vue 数据驱动原理,响应式 原理?

    Object.defineProperty(obj,"name",{ get(){ console.log("被访问了") return obox.innerH ...

  7. Java ArrayList常用接口介绍及示例

    Java List 常用类型 类型 特征 ArrayList 随机访问元素快:中间插入与删除元素较慢:操作不是线程安全的 LinkedList 中间插入与删除操作代价较低,提供优化的顺序访问:随机访问 ...

  8. kubernetes之requests和limits

    说明 1.当集群中的计算资源不很充足, 如果集群中的pod负载突然加大, 就会使某个node的资源严重不足, 为了避免系统挂掉, 该node会选择清理某些pod来释放资源, 此时每个pod都可能成为牺 ...

  9. kafka api的基本使用

    kafka API kafka Consumer提供两套Java API:高级Consumer API.和低级Consumer API. 高级Consumer API 优点: 高级API写起来简单,易 ...

  10. Redis05——Redis高级运用(管道连接,发布订阅,布隆过滤器)

    Redis高级运用 一.管道连接redis(一次发送多个命令,节省往返时间) 1.安装nc yum install nc -y 2.通过nc连接redis nc localhost 6379 3.通过 ...