博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P6772-[NOI2020]美食家【矩阵乘法,倍增】
阅读量:2022 次
发布时间:2019-04-28

本文共 1138 字,大约阅读时间需要 3 分钟。

前言

我考场(线上赛)切NOI的题了!

在这里插入图片描述


正题

题目链接:


题目大意

n n n个点 m m m条边,每个城市有不同的愉悦值,从 1 1 1出发,要求经过 T T T的时间后回到点 1 1 1(不能原地停留。

特别的是有 k k k个美食节,在第 t i t_i ti个时刻如果在第 x i x_i xi个城市就可以额外获得 y i y_i yi的愉悦值,求路径上最大愉悦值


解题思路

首先矩阵乘法变形后是可以求最长路的

之后之前有一道题目和这题很像,因为边权最大只有5,所以可以将每个点分成 5 5 5个点就可以跑矩阵乘法了。这样有 250 250 250个点,跑一次矩阵乘法是 O ( 25 0 3 log ⁡ T ) O(250^3\log T) O(2503logT),不考虑美食节的情况下可以过,但是如果有美食节时间复杂度就接近 O ( k ∗ 25 0 3 log ⁡ T ) O(k*250^3\log T) O(k2503logT)显然不可过。

然后之前有一道 N O I   O n l i n e NOI\ Online NOI Online的题目正解是先预处理出 l o g T log T logT个矩阵然后再用向量乘矩阵

我们就得出了解法,我们先预处理使得 F i = A 2 i F_i=A^{2^i} Fi=A2i,然后这样我们用向量乘矩阵就是 O ( n 2 ) O(n^2) O(n2)的,之后每次做矩阵到每一个美食节,然后对于在那一天的情况加上一个愉悦值即可,可以通过本题。

时间复杂度 : O ( ( n w ) 3 log ⁡ T + ( n w ) 2 k log ⁡ T ) :O((nw)^3\log T+(nw)^2k\log T) :O((nw)3logT+(nw)2klogT)


c o d e code code

#include
#include
#include
#define p(x,y) ((x)*5+(y))#define ll long longusing namespace std;const ll N=51;struct matrix{
ll a[N*5][N*5];}f[32];struct node{
ll t,x,y;}h[210];ll n,m,T,k,tot,Size,a[N*5],p2[32],c[N*5];matrix operator*(const matrix &a,const matrix &b){
matrix c;memset(c.a,0xcf,sizeof(c.a)); for(ll i=0;i

转载地址:http://wcwaf.baihongyu.com/

你可能感兴趣的文章
还原JavaScript的真实历史~
查看>>
《JAVASCRIPT语言精髓与编程实践》预读样章公开~
查看>>
旧文重发:谈企业软件架构设计
查看>>
JavaScript全局优化带来的负面效果……
查看>>
Erlang in Delphi 项目发布!
查看>>
VCL已死,RAD已死(4)
查看>>
关于“VCL已死、RAD已死”答读者问
查看>>
VCL已死,RAD已死(5)
查看>>
VCL已死,RAD已死(6) - 结语与预测
查看>>
形式重要吗?
查看>>
在Erlounge III大会上的讲演PPT
查看>>
做代码的曲线问题
查看>>
说说“从编程到工程”专栏的由来
查看>>
全书目录
查看>>
关于《Delphi源代码分析》的讨论
查看>>
MPD大会上使用的PPT分享 - 2014
查看>>
世界需要一种什么样的语言?
查看>>
饭桶英雄
查看>>
表面的简洁
查看>>
本来面目——大教堂、集市,与作坊
查看>>