当前位置: 首页 > news >正文

POJ3613 Cow Relays(矩阵快速幂)

题目大概要求从起点到终点恰好经过k条边的最短路。

离散数学告诉我们邻接矩阵的k次幂就能得出恰好经过k条路的信息,比如POJ2778。

这题也一样,矩阵的幂运算定义成min,而min满足结合律,所以可以用快速幂求解。

另外这题点的序号要离散化一下,最多也就200个点。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 #define INF (1<<29)
 6 
 7 int N;
 8 
 9 struct Mat{
10     int m[222][222];
11     Mat(){
12         for(int i=0; i<222; ++i){
13             for(int j=0; j<222; ++j) m[i][j]=INF;
14         }
15     }
16 };
17 Mat operator*(const Mat &m1,const Mat &m2){
18     Mat m;
19     for(int i=0; i<N; ++i){
20         for(int j=0; j<N; ++j){
21             for(int k=0; k<N; ++k){
22                 m.m[i][j]=min(m.m[i][j],m1.m[i][k]+m2.m[k][j]);
23             }
24         }
25     }
26     return m;
27 };
28 
29 int idx[1111];
30 
31 int main(){
32     Mat m;
33     int n,t,s,e,a,b,c;
34     scanf("%d%d%d%d",&n,&t,&s,&e);
35     memset(idx,-1,sizeof(idx));
36     while(t--){
37         scanf("%d%d%d",&c,&a,&b);
38         if(idx[a]==-1){
39             idx[a]=N++;
40         }
41         if(idx[b]==-1){
42             idx[b]=N++;
43         }
44         m.m[idx[a]][idx[b]]=m.m[idx[b]][idx[a]]=c;
45     }
46     --n;
47     Mat ans=m;
48     while(n){
49         if(n&1){
50             ans=ans*m;
51         }
52         m=m*m;
53         n>>=1;
54     }
55     printf("%d",ans.m[idx[s]][idx[e]]);
56     return 0;
57 }

 

转载于:https://www.cnblogs.com/WABoss/p/5500353.html

相关文章:

  • 序列化和反序列化的底层实现原理是什么?
  • Android单个控件占父控件宽度一半且水平居中
  • Java提供的排序算法是怎么实现的?
  • 如何将一个长URL转换为一个短URL?
  • 一个CC++程序的生命历程
  • 为什么要有ID发号器、原理是什么以及如何实现?
  • Python系列之模块、和字符串格式化
  • 分布式之数据库和缓存双写一致性方案解析!
  • linux查看文件内容的常见命令
  • 慢SQL!压垮团队的最后一根稻草!
  • 2017年秋招美团Java程序员开发,看我如何拿到offer
  • Javascript中常用事件的命名
  • 阿里的面试官都喜欢问哪些问题?
  • 浅谈C语言中结构体的初始化
  • Spring AOP中的JDK和CGLib动态代理哪个效率更高?
  • Angular 2 DI - IoC DI - 1
  • Angular数据绑定机制
  • Docker下部署自己的LNMP工作环境
  • ES6简单总结(搭配简单的讲解和小案例)
  • ES6语法详解(一)
  • JAVA 学习IO流
  • js如何打印object对象
  • Linux gpio口使用方法
  • python 装饰器(一)
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • spring学习第二天
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 入口文件开始,分析Vue源码实现
  • 微服务框架lagom
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 在weex里面使用chart图表
  • 智能网联汽车信息安全
  • ​人工智能书单(数学基础篇)
  • #微信小程序:微信小程序常见的配置传值
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (33)STM32——485实验笔记
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (转)创业的注意事项
  • .NET Core 项目指定SDK版本
  • .net core控制台应用程序初识
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET下ASPX编程的几个小问题
  • ;号自动换行
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [CTO札记]盛大文学公司名称对联
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分
  • [Flutter]打包IPA
  • [leetcode] Longest Palindromic Substring
  • [LeetCode刷题笔记]1 - 两数之和(哈希表)
  • [Linux] 常用命令--版本信息/关机重启/目录/文件操作
  • [one_demo_16]直接插入排序的demo