【矩阵乘法】【倍增】美食家(luogu 6772)

美食家

题目大意

给你一个有向图,边权为经过所需时间
每个点有一个点权,有些点还有有特殊的点权
当你到达一个点后,可以获得该点的点权(重复经过可以重复获得,但不能停留),若在某个时间到某个点,则可获得该特殊点权
现在问你从点1出发走,在时间T回到1得到的最大点权和是多少

输入样例#1

3 4 11 0
1 3 4
1 2 1
2 1 3
2 3 2
3 1 4

输出样例#1

13

输入样例#2

4 8 16 3
3 1 2 4
1 2 1
1 3 1
1 3 2
3 4 3
2 3 2
3 2 1
4 2 1
4 1 5
3 3 5
1 2 5
5 4 20

输出样例#2

39

样例解释#1

在这里插入图片描述

对于上图,小 W 一种为期 11 天的可行旅游方案为 1→2→1→2→3→11 \to 2 \to 1 \to 2 \to 3 \to 1121231

第 0 天,小 WWW 从城市 1 开始旅行,获得愉悦值 1 并向城市 2 出发。
第 1 天,小 WWW 到达城市 2,获得愉悦值 3 并向城市 1 出发。
第 4 天,小 WWW 到达城市 1,获得愉悦值 1 并向城市 2 出发。
第 5 天,小 WWW 到达城市 2,获得愉悦值 3 并向城市 3 出发。
第 7 天,小 WWW 到达城市 3,获得愉悦值 4 并向城市 1 出发。
第 11 天,小 WWW 到达城市 1,获得愉悦值 1 并结束旅行。
小 W 在该旅行中获得的愉悦值之和为 13。

样例解释#2

最优方案为 1→3→4→2→3→4→11 \to 3 \to 4 \to 2 \to 3 \to 4 \to 11342341

第 0 天,小 WWW 从城市 1 开始旅行,获得愉悦值 3 并沿道路 3 通行。
第 2 天,小 WWW 到达城市 3,获得愉悦值 2 并沿道路 4 通行。
第 5 天,小 WWW 到达城市 4,由于美食节获得愉悦值 20+4 并沿道路 7 通行。
第 6 天,小 WWW 到达城市 2,获得愉悦值 1 并沿道路 5 通行。
第 8 天,小 WWW 到达城市 3,获得愉悦值 2 并沿道路 4 通行。
第 11 天,小 WWW 到达城市 4,获得愉悦值 4 并沿道路 8 通行。
第 16 天,小 WWW 到达城市 1,获得愉悦值 3 并结束旅行。
小 W 获得的愉悦值之和为 39。

数据范围

1≤n≤50,n≤m≤501,0≤k≤200,1≤ti≤T≤109。1 \leq n \leq 50,n \leq m \leq 501,0 \leq k \leq 200,1 \leq t_i \leq T \leq 10^9 。1n50nm5010k2001tiT109
1≤wi≤5,1≤ci≤52501,1≤ui,vi,xi≤n,1≤yi≤1091 \leq w_i \leq 5,1 \leq c_i \leq 52501,1 \leq u_i, v_i, x_i \leq n,1 \leq y_i \leq 10^91wi51ci525011ui,vi,xin1yi109

解题思路

我们发现www很小,我们可以把一条边分成若干长度为1的边,这样点最多只有250个
当没有特殊点权时
我们可以用邻接矩阵跑矩阵乘法
时间O((nw)3logT)O((nw)^3 logT)O((nw)3logT)
如果有特殊点权时直接暴力跑矩阵乘法那时间是O((nw)3klogT)O((nw)^3 k\ logT)O((nw)3k logT)
会TLE
我们与处理出fi=A2if_i=A^{2^i}fi=A2i
然后倍增求特殊点权到特殊点权之间的时间,然后加上相应的权值
向量乘矩阵时间O((nw)2)O((nw)^2)O((nw)2)
总时间O((nw)3logT+(nw)2klogT)O((nw)^3\ logT\ +\ (nw)^2k\ logT)O((nw)3 logT + (nw)2k logT)

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define p(x, y) ((x * 5) + (y))
using namespace std;
ll n, m, t, k, x, y, z, w, nn, now, pw[35], a[260], b[260];
struct matrix
{ll a[260][260];
}f[35];
struct node
{ll t, v, s;
}q[210];
bool cmp(node a, node b)
{return a.t < b.t;
}
matrix jc(matrix &a)
{matrix b;memset(b.a, 0xcf, sizeof(b.a));for (ll i = 0; i < nn; ++i)for (ll j = 0; j < nn; ++j)for (ll k = 0; k < nn; ++k)b.a[i][j] = max(b.a[i][j], a.a[i][k] + a.a[k][j]);//矩阵乘矩阵return b;
}
void js(matrix &b)
{ll c[260];memcpy(c, a, sizeof(a));memset(a, 0xcf, sizeof(a));for (ll i = 0; i < nn; ++i)for (ll j = 0; j < nn; ++j)a[j] = max(a[j], c[i] + b.a[i][j]);//向量乘矩阵return;
}
void power(ll x)
{for (ll i = 0; i <= w; ++i)if (x&pw[i]) js(f[i]);return;
}
int main()
{scanf("%lld%lld%lld%lld", &n, &m, &t, &k);nn = n * 5;memset(f[0].a, 0xcf, sizeof(f[0].a));for (ll i = 0; i < n; ++i){scanf("%lld", &b[i]);for (ll j = 1; j < 5; ++j)f[0].a[p(i, j)][p(i, j - 1)] = 0;//拆分点}for (ll i = 1; i <= m; ++i){scanf("%lld%lld%lld", &x, &y, &z);x--;y--;f[0].a[p(x, 0)][p(y, z - 1)] = b[y];//连边}pw[0] = 1;while(pw[w] * 2 <= t){w++;pw[w] = pw[w - 1] * 2;f[w] = jc(f[w - 1]);//计算f}for (ll i = 1; i <= k; ++i)scanf("%lld%lld%lld", &q[i].t, &q[i].v, &q[i].s), q[i].v--;sort(q + 1, q + 1 + k, cmp);q[++k] = (node){t, 0, 0};memset(a, 0xcf, sizeof(a));a[0] = b[0];for (ll i = 1; i <= k; ++i){power(q[i].t - now);//倍增a[p(q[i].v, 0)] += q[i].s;now = q[i].t;}if (a[0] < 0) printf("-1");else printf("%lld", a[0]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net core实践系列之短信服务-为什么选择.net core(开篇)

前言从今天我将会写.net core实战系列&#xff0c;以我最近完成的短信服务作为例子。该系列将会尽量以最短的时间全部发布出来。源码也将优先开源出来给大家。源码地址&#xff1a;https://github.com/SkyChenSky/Sikiro.SMS.NET CORE简介ASP.NET Core 是一个跨平台的高性能开源…

P3172-[CQOI2015]选数【dp,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P3172 题目大意 求有多少个长度为NNN的值域在[L,R][L,R][L,R]这个区间的序列满足它们的gcdgcdgcd恰好是KKK。 解题思路 dpdpdp容斥思想 我们先让L⌊LK−1K⌋,R⌊RK⌋L\lfloor\frac{LK-1}{K}\rfloor,R\lfloor\frac{R}{K}\rfl…

博弈论总结

前言 本篇为博弈论总结&#xff0c;文章会按题目类型分类。 基础铺垫——必胜点和必败点的介绍 P点&#xff1a;必败点&#xff0c;换而言之&#xff0c;就是谁处于此位置&#xff0c;则在双方操作正确的情况下必败。 N点&#xff1a;必胜点&#xff0c;处于此情况下&#x…

牛客网【每日一题】5月8日题目精讲 codeJan与旅行

比赛链接&#xff1a; 文章目录题目描述题解&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 codeJan 非常喜欢旅行。现在有 n 个城市排在一条线上&#xff0c;并…

.netcore consul实现服务注册与发现-集群完整版

一、Consul的集群介绍Consul Agent有两种运行模式&#xff1a;Server和Client。这里的Server和Client只是Consul集群层面的区分&#xff0c;与搭建在Cluster之上的应用服务无关&#xff0c; 以Server模式运行的Consul Agent节点用于维护Consul集群的状态&#xff0c;官方建议每…

【矩阵乘法】【倍增】WYC(luogu 3597)

WYC 题目大意 给你一个有向图&#xff0c;让你求图中的kkk短路&#xff08;非简单路径&#xff09; 输入样例# 6 6 11 1 2 1 2 3 2 3 4 2 4 5 1 5 3 1 4 6 3输出样例#1 4数据范围 1⩽n⩽40&#xff0c;1⩽m⩽1000&#xff0c;1⩽k⩽10181\leqslant n\leqslant 40&#xff…

匹配(树形DP)

传送门 题目描述&#xff1a; 有一张无向联通图 G⟨V,E⟩ &#xff0c;其中顶点数 |V|n &#xff0c;边数 |E|n−1 。求有多少种方案使得删边后残余图中的最大匹配数恰好为 m 的倍数。 题解&#xff1a; 这道题看起来是求最大匹配&#xff0c;其实关系不大&#xff0c;正解…

博弈论讲解(一)

常见的博弈论有巴什博弈&#xff0c;威佐夫博弈&#xff0c;尼姆博弈&#xff0c;斐波那契博弈等等&#xff0c;今天暂时讲几个 文章目录一.巴什博弈证明&#xff1a;代码二.威佐夫博奕结论&#xff1a;代码&#xff1a;三.环形博弈结论证明代码&#xff1a;一.巴什博弈 巴什博…

浅谈surging服务引擎中的rabbitmq组件和容器化部署

1、前言上个星期完成了surging 的0.9.0.1 更新工作&#xff0c;此版本通过nuget下载引擎组件&#xff0c;下载后&#xff0c;无需通过代码build集成&#xff0c;引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎&#xff0c;而这篇将介绍浅谈surging服务引擎中的rabbi…

csp-j/s总结

文章目录csp-jcsp-s总结csp-j T1傻逼题(我是傻逼&#xff09;&#xff0c;手残把&打成整除了&#xff08;大样例还对了gg&#xff09; T2乱推&#xff0c;然后打了个O(n)O(n)O(n)&#xff0c;却WA了15分&#xff1f; T3看了看&#xff0c;修改不会相互影响&#xff1f;那不…

51nod1220-约数之和【莫比乌斯反演,杜教筛】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1220 题目大意 给出nnn&#xff0c;求∑i1n∑j1nσ(i∗j)\sum_{i1}^n\sum_{j1}^n\sigma(i*j)i1∑n​j1∑n​σ(i∗j) 其中σ\sigmaσ表示约数和。 解题思路 首先有结论σ(i∗j)∑x∣i∑y∣j[gcd(x,y)1]…

CDQ分治与整体二分

首先说明&#xff0c;CDQ分治与整体二分都是离线算法 CDQ分治&#xff1a; 流程&#xff1a; 1.我们要解决一系列问题&#xff0c;这些问题一般包含修改和查询操作&#xff0c;可以把这些问题排成一个序列&#xff0c;用一个区间[L,R]表示。 2.分。递归处理左边区间[L,M]和…

博弈论讲解(二)

文章目录斐波那契博弈问题&#xff1a;结论证明&#xff1a;尼姆博奕(Nimm Game)问题&#xff1a;结论&#xff1a;证明&#xff1a;代码&#xff1a;公平组合博弈&#xff08;Impartial Combinatori Games&#xff09;理论知识&#xff08;1&#xff09;、若面临末状态者为获胜…

.net core实践系列之短信服务-架构设计

前言上篇《.net core实践系列之短信服务-为什么选择.net core&#xff08;开篇&#xff09;》简单的介绍了&#xff08;水了一篇&#xff09;.net core。这次针对短信服务的架构设计和技术栈的简析。源码地址&#xff1a;https://github.com/SkyChenSky/Sikiro.SMS为什么需要架…

【矩阵乘法】Matrix Power Series(poj 3233)

Matrix Power Series poj 3233 题目大意 给你一个矩阵A&#xff0c;让你求SAA2A3…AkS A A^2 A^3 … A^kSAA2A3…Ak 输入样例 2 2 4 0 1 1 1输出样例 1 2 2 3n⩽30,k⩽109,m<104,a∈A,a⩽32768n \leqslant 30,k \leqslant 10^9,m < 10^4,a\in A,a \leqslant32…

P3702-[SDOI2017]序列计数【矩阵乘法】

正题 题目链接:https://www.luogu.com.cn/problem/P3702 题目大意 nnn个不超过mmm的正整数&#xff0c;要求和是ppp的倍数且至少有一个质数。 解题思路 用总方案数减去只有非质数的方案数即可。 线性筛出所有质数&#xff0c;然后矩阵乘法转移即可。 时间复杂度O(mp3log⁡n…

字符串hash(一)

很久没遇到过hash的题了&#xff0c;今天来重新温故一下 文章目录序言常用的几个字符串hash方法&#xff1a;hash公式&#xff08;自然溢出&#xff09;讲解模板单hash讲解模板双hash讲解代码总结序言 你有没有想过&#xff0c;字符串存储一大溜&#xff0c;比较时又麻烦又折腾…

CAP 2.3版本发布,支持 MongoDB

前言经过2个月的调整及测试&#xff0c;CAP 2.3 版本终于发布了&#xff0c;这个版本最大的特性就是对于 MongoDB 的支持&#xff0c;感谢博客园团队的keke同学对于 MongoDB 支持所提供的 PR&#xff0c;相信随着博客园的使用&#xff0c;CAP 会越来越多的帮助到更多的人。CAP …

【矩阵乘法】递推(ssl 1532)

递推 ssl 1532 题目大意 给出数列a0,a1…ana_0,a_1…a_na0​,a1​…an​和fff的前n−1n-1n−1项f0,f1…fn−1f_0,f_1…f_{n-1}f0​,f1​…fn−1​ fia0∗fi−na1∗fi−(n−1)...an−1∗fi−1anf_ia_0*f_{i-n}a_1*f_{i-(n-1)}...a_{n-1}*f_{i-1}a_nfi​a0​∗fi−n​a1​∗fi…

P3185-[HNOI2007]分裂游戏【SG函数】

正题 题目链接:https://www.luogu.com.cn/problem/P3185 题目大意 nnn个瓶子&#xff0c;开始第iii个里有pip_ipi​个糖果&#xff0c;操作的人可以找到一个三元组(i,j,k)i<j≤k(i,j,k)\ i<j\leq k(i,j,k) i<j≤k然后取出iii中的一个糖果&#xff0c;在j,kj,kj,k中各…