Wycieczki 线性代数
B. Wycieczki
题目描述
给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种。
将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点。
输入格式
第一行包含三个整数n,m,k(1<=n<=40,1<=m<=1000,1<=k<=10^18)。
接下来m行,每行三个整数u,v,c(1<=u,v<=n,u不等于v,1<=c<=3),表示从u出发有一条到v的单向边,边长为c。
可能有重边。
输出格式
包含一行一个正整数,即第k短的路径的长度,如果不存在,输出-1。
样例
样例输入
6 6 11
1 2 1
2 3 2
3 4 2
4 5 1
5 3 1
4 6 3
样例输出
4
数据范围与提示
长度为1的路径有1->2,5->3,4->5。
长度为2的路径有2->3,3->4,4->5->3。
长度为3的路径有4->6,1->2->3,3->4->5,5->3->4。
长度为4的路径有5->3->4->5。
这道题时间跨度比较长了,主要是因为这道题贼难调,稍有不慎就会WA,而且这道题的测试点贼多,多到会出现2分情况,所以真的是我的签名说的,一杯茶一包纸,一份代码调成X
其实这道题还算好像,而且有思维量,主要就是要把边的矩阵拆点,然后建边,注意需点,也就是整个矩阵会扩大三倍;整个题其实就是二分(我打了一半,跑的实在是太慢了,所以换了一种方法)倍增,倍增就和求lca其实是一样的,就是换成了矩阵,不知其他神犇是怎么打的,反正我是使用结构体,但是要注意细节,整个卡了一晚上,就是因为矩阵传参没加取地址,加上就A了,有神犇知道为啥的就留言吧
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> using namespace std; #define LL long long #define re register #define F(i,a,b) for(LL i=a;i<=b;i++) LL n,m,u,v,d,t; long long s,k; bool flag; inline LL read() {re LL ss=0;char bb=getchar();while(bb<48||bb>57)bb=getchar();while(bb>=48&&bb<=57)ss=(ss<<1)+(ss<<3)+(bb^48),bb=getchar();return ss; } struct Martix {LL x[250][250];void init(){memset(x,0,sizeof(x));} }mul[125],tmp; Martix bg,base,now; void made(Martix &a,Martix &b,Martix &c) {flag=1;tmp.init();F(i,1,3*n+1)F(l,1,3*n+1){if(!a.x[i][l])continue;//debug(i);debug(l);F(j,1,3*n+1)tmp.x[i][j]=tmp.x[i][j]+a.x[i][l]*b.x[l][j];if(i==1&&tmp.x[i][3*n+1]>=k)flag=0; }c=tmp; } int main() {//freopen("cnm.txt","r",stdin);n=read(),m=read(),k=read();F(i,1,n){bg.x[1][i]=1;base.x[i][i+n]=1;base.x[i+n][i+2*n]=1;}while(m--){u=read(),v=read(),d=read();base.x[u+(d-1)*n][v]++;base.x[u+(d-1)*n][3*n+1]++;}base.x[3*n+1][3*n+1]=1;mul[0]=base;for(;t<=63;t++){ if(t)made(mul[t-1],mul[t-1],mul[t]);made(bg,mul[t],now);if(!flag||now.x[1][3*n+1]>=k){break;}}t--;if(t==63&&now.x[1][3*n+1]<k){puts("-1");return 0;}for(LL i=t;i>=0;i--){made(bg,mul[i],now);if(flag&&now.x[1][3*n+1]<k){s+=(1ll<<i);bg=now;}}printf("%lld\n",s+1); }
hhh
endl;
转载于:https://www.cnblogs.com/hzoi-lsc/p/11209856.html
Wycieczki 线性代数相关推荐
- NVIDIA GPU上的Tensor线性代数
NVIDIA GPU上的Tensor线性代数 cuTENSOR库是同类中第一个GPU加速的张量线性代数库,提供张量收缩,归约和逐元素运算.cuTENSOR用于加速在深度学习训练和推理,计算机视觉,量子 ...
- GPU上稀疏矩阵的基本线性代数
GPU上稀疏矩阵的基本线性代数 cuSPARSE库为稀疏矩阵提供了GPU加速的基本线性代数子例程,这些子例程的执行速度明显快于仅CPU替代方法.提供了可用于构建GPU加速求解器的功能.cuSPARSE ...
- GPU上的基本线性代数
GPU上的基本线性代数 cuBLAS库提供了基本线性代数子例程(BLAS)的GPU加速实现.cuBLAS通过针对NVIDIA GPU进行了高度优化的嵌入式行业标准BLAS API来加速AI和HPC应用 ...
- 线性代数--矩阵、向量
线性代数 线性代数 矩阵及其运算 矩阵分块法 矩阵的初等变换于线性方程组 矩阵的初等变换 矩阵的秩 线性方程组的解 向量组的线性相关性 向量组及其线性组合 向量组的线性相关性 线性代数 矩阵及其运算 ...
- 基于C++模板的线性代数库---Eigen
Eigen 是一个基于C++模板的线性代数库,直接将库下载后放在项目目录下,然后包含头文件就能使用,非常方便.此外,Eigen的接口清晰,稳定高效. 在解决方案"属性"中的&quo ...
- 矩阵计算在计算机科学中,开发者必读:计算机科学中的线性代数(附论文)
来源:机器之心 作者:Petros Drineas.Michael W. Mahoney 本文共3994字,建议阅读6分钟.本文为你分享一篇来自普渡大学与UC Berkeley两位教授的概述论文中的线 ...
- 2021-2022-1 线性代数知识点总结的视频
01 线性方程组 02 矩阵及其运算 03 向量空间(上) 03 向量空间(下) 04 特征值与特征向量 05 实对称矩阵与二次型 2021 线性代数 第三章 习题课 2021 线性代数 第四章 习题 ...
- 【通知】2021-2022-1线性代数课程答疑安排
2021-2022-1线性代数课程答疑安排 本学期线性代数课程答疑安排如下: 答疑时间:每周二 13:00-14:30: 答疑地点:教七楼202(信息教研室): 答疑教师排班如下: 第五周:李鹏,马建 ...
- 线性代数:05 实对称矩阵与二次型
本讲义是自己上课所用幻灯片,里面没有详细的推导过程(笔者板书推导)只以大纲的方式来展示课上的内容,以方便大家下来复习. 本章是特征值与特征向量知识的延续,根据谱定理可知实对称矩阵可以正交对角化,对角阵 ...
最新文章
- 贾扬清:我对人工智能方向的一点浅见
- 7 年“键盘手”没在意!某程序员手疼查出骨肿瘤,已让骨头成了“豆腐渣”
- 9.9学python靠谱吗-走进小学教材,Python何德何能?9图对比道出真相
- C# 学习笔记(9)线程
- 抽取样本java实验报告_一个自定义classloader的函数抽取壳样本
- 日语输入法电脑版_日语输入法下载及使用教程【建议收藏】
- 以智能数据架构,挖掘增长金矿
- 从根儿上理解mysql_从根儿上理解 MySQL - 页总结
- 已知斜边和角度求邻边_从数学史角度看数系发展
- php一个入口 nginx 自动带斜线,Nginx 自动加斜杠
- 从代码规范学到的细节
- word是不是计算机硬件,word及excel模拟试题1_计算机硬件及应用_IT/计算机_资料
- Codevs 1506 传话
- Linux系统修改编码(转)
- InstallShield安装过程介绍
- Mybatis源码编译
- matlab文本文件操作
- 谷歌浏览器mac切换标签快捷键
- win2008计算机无法访问,win2008共享资源无法访问故障的应对措施
- pkusc 2018 滚粗
热门文章
- android 仿携程选择城市,类似携程商旅的城市选择器 CityPicker
- 提高篇 第四部分 数据结构 第2章 RMQ问题
- 计算机控制作业及答案,《微机系统与维护》课程作业及答案(二)
- VMWare笔记-解决虚拟机能ping通主机能上网,但主机ping不通虚拟机(含思路)
- SQL笔记-通过构建索引表方便数据库管理
- C语言工作笔记-函数指针的使用(补充C回调系统)
- Qt creator5.7 OpenCV249之均值滤波(含源码下载)
- mysql round 0.1111_听说Mysql你很豪横?-------------分分钟带你玩转SQL高级查询语句(库函数,存储过程)...
- python创建角色_如何使用 Python 创建一名可操控的角色玩家
- 面试题 gety() getTop() TranslationY关系