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=;char bb=getchar();
while(bb<||bb>)bb=getchar();
while(bb>=&&bb<=)ss=(ss<<)+(ss<<)+(bb^),bb=getchar();
return ss;
}
struct Martix
{
LL x[][];
void init()
{
memset(x,,sizeof(x));
}
}mul[],tmp;
Martix bg,base,now;
void made(Martix &a,Martix &b,Martix &c)
{
flag=;
tmp.init();
F(i,,*n+)
F(l,,*n+)
{
if(!a.x[i][l])continue;
//debug(i);debug(l);
F(j,,*n+)
tmp.x[i][j]=tmp.x[i][j]+a.x[i][l]*b.x[l][j];
if(i==&&tmp.x[i][*n+]>=k)flag=;
}
c=tmp;
}
int main()
{
//freopen("cnm.txt","r",stdin);
n=read(),m=read(),k=read();
F(i,,n)
{
bg.x[][i]=;
base.x[i][i+n]=;
base.x[i+n][i+*n]=;
}
while(m--)
{
u=read(),v=read(),d=read();
base.x[u+(d-)*n][v]++;
base.x[u+(d-)*n][*n+]++;
}
base.x[*n+][*n+]=;
mul[]=base;
for(;t<=;t++)
{
if(t)
made(mul[t-],mul[t-],mul[t]);
made(bg,mul[t],now);
if(!flag||now.x[][*n+]>=k){break;}
}
t--;
if(t==&&now.x[][*n+]<k)
{
puts("-1");
return ;
}
for(LL i=t;i>=;i--)
{
made(bg,mul[i],now);
if(flag&&now.x[][*n+]<k)
{
s+=(1ll<<i);
bg=now;
}
}
printf("%lld\n",s+);
}
hhh
endl;
Wycieczki 线性代数的更多相关文章
- 【BZOJ-4386】Wycieczki DP + 矩阵乘法
4386: [POI2015]Wycieczki Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 197 Solved: 49[Submit][Sta ...
- 【BZOJ-3996】线性代数 最小割-最大流
3996: [TJOI2015]线性代数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1054 Solved: 684[Submit][Statu ...
- 斯坦福大学CS224d基础1:线性代数回顾
转自 http://blog.csdn.net/han_xiaoyang/article/details/51629242 斯坦福大学CS224d基础1:线性代数知识 作者:Zico Kolter ( ...
- 算法库:基础线性代数子程序库(Basic Linear Algebra Subprograms,BLAS)介绍
调试DeepFlow光流算法,由于作者给出的算法是基于Linux系统的,所以要在Windows上运行,不得不做大量的修改工作.移植到Windows平台,除了一些头文件找不到外,还有一些函数也找不到.这 ...
- 【BZOJ】【TJOI2015】线性代数
网络流/最小割/最大权闭合图 2333好开心,除了一开始把$500^2$算成25000……导致数组没开够RE了一发,可以算是一次AC~ 咳咳还是回归正题来说题解吧: 一拿到这道题,我就想:这是什么鬼玩 ...
- OpenGLES 怎样在十天内掌握线性代数 - 希望这是真的!
OpenGLES 怎样在十天内掌握线性代数 - 希望这是真的! 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&q ...
- MIT线性代数课程 总结与理解-第一部分
概述 个人认为线性代数从三个角度,或者说三个工具来阐述了线性关系,分别是: 向量 矩阵 空间 这三个工具有各自的一套方法,而彼此之间又存在这密切的联系,通过这些抽象出来的工具可以用来干一些实际的活,最 ...
- 线性代数-矩阵-【1】矩阵汇总 C和C++的实现
矩阵的知识点之多足以写成一本线性代数. 在C++中,我们把矩阵封装成类.. 程序清单: Matrix.h//未完待续 #ifndef _MATRIX_H #define _MATRIX_H #incl ...
- 线性代数-矩阵-【2】矩阵生成 C和C++实现
矩阵的知识点之多足以写成一本线性代数. 所以我们把矩阵的运算封装成矩阵类.以C++为主进行详解. 点击这里可以跳转至 [1]矩阵汇总:http://www.cnblogs.com/HongYi-Lia ...
随机推荐
- MySQLdb操作数据库
堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + ...
- Windows系统调用中的现场保存
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的现场保存 我们之前介绍过三环进零环的步骤 ...
- Java微服务(二):负载均衡、序列化、熔断
本文接着上一篇写的<Java微服务(二):服务消费者与提供者搭建>,上一篇文章主要讲述了消费者与服务者的搭建与简单的实现.其中重点需要注意配置文件中的几个坑. 本章节介绍一些零散的内容:服 ...
- Prometheus 源码解读(一)
Prometheus 源码解读(一) Prometheus 是云原生监控领域的事实标准,越来越来的开源项目开始支持 Prometheus 监控数据格式.从本篇开始,我将和大家一起阅读分析 Promet ...
- nginx::环境搭建
ubuntu18.04 环境 1.需要gcc 环境,如果没有gcc环境,则需要安装 apt install gcc .安装pcre依赖库 PCRE(Perl Compatible Regular Ex ...
- FastDFS集群-安装说明
一.简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线 ...
- ajax跨域简单请求与复杂请求
开发网站时经常会用到跨域资源共享(简称cors,后面使用简称)来解决跨域问题,但是在使用cors的时候,http请求会被划分为两类,简单请求和复杂请求,而这两种请求的区别主要在于是否会触发cors预检 ...
- sublime设置 reindent 快捷键
设置快捷键 使用快捷键 cmd + shift + p 打开控制面板 输入 key 关键词 点击进入 Key Bindings -User 添加如下代码 { "keys": [&q ...
- 数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优.但是一些"不好"的SQL也会导致数据库查询变慢,影响业务流程.本文从SQL角度进行数据库优化,提升SQ ...
- OptimalSolution(1)--递归和动态规划(1)斐波那契系列问题的递归和动态规划
一.斐波那契数列 斐波那契数列就是:当n=0时,F(n)=0:当n=1时,F(n)=1:当n>1时,F(n) = F(n-1)+F(n-2). 根据斐波那契数列的定义,斐波那契数列为(从n=1开 ...