大中锋正在一个游乐场里玩耍。游乐场里有很多娱乐设施,娱乐设施之间相互有道路相连,经过每一条路都需要花费一定的时间。 为了方便游客,每一个娱乐设施旁都会配有一个小卖部,一部分小卖部会销售可乐,另一部分会销售汉堡。 由于大中锋十分贪吃,所以每当他走到一个娱乐设施,他都会先去购买一杯可乐或一个汉堡,并把...
「TJOI2019」大中锋的游乐场 题目链接 问题分析 比较明显的最短路模型。需要堆优化的dij。建图的时候注意细节就好。 参考程序 #include <bits/stdc++.h> #define LL long long //#define DEBUG using namespace std; const int Maxn = 10010; const int Maxm = 100010; const int Maxk = 12; struct ed...
然后发现k的范围仅为10,也就是说过程中合法的值仅有21种,因此跑一遍dij或spfa(嘿嘿嘿)即可。 1#include<bits/stdc++.h>2usingnamespacestd;3#definepi pair<int,int>4#definemp make_pair5#definefi first6#definese second7#defineN 100058queue<pi >q;9structji{10intnex,to,len;11}edge[N*20];12...
[洛谷P5340][TJOI2019]大中锋的游乐场 题目大意:有n(n⩽104)n(n⩽104)个点,m(m⩽105)m(m⩽105)条边的无向图,每个点有一个属性A/BA/B,要求|cntA−cntB|⩽k(k⩽10)|cntA−cntB|⩽k(k⩽10),问S→TS→T最短路径 题解:把每个点拆成2k+12k+1个点,分别标号为[−k,k][...
洛谷P5340 大中锋的游乐场题意给出一张 n 个点m 条边的图,每个点有一个点权 1 或−1。给出点 s,t,求出 (s,t) 间满足以下条件的最短路。任意时刻,走过的路径上点权和均 ∈[−k,k]。思路分层图最短路。disi,j 表示走到 i,点权和为 j 的最短路。
实际就是一个带有限制的最短路 因为k<=10k<=10,所以我们珂以暴力将每个点的权值分为[-k,k],为了方便我们珂以转化成[0,2k],将汉堡的权值记为1,可乐的权值记为-1,最短路即可,如果发现不合理的就果断扔掉即可(不知道有没有好事之徒用SPFA写)
[TJOI2019]大中锋的游乐场 题目本质要求的还是最短路,但因为有第二维权值(汽水看成+1+1,汉堡看成−1−1)的限制,我们在最短路的基础上加上一维f[i][j]f[i][j]表示到达ii节点,权值为jj的最短路长度,然后像正常最短路那样转移,最后取终点所有状态的最小值即可。
luogu P5340 [TJOI2019]大中锋的游乐场 传送门 要求经过路径汉堡的点和可乐的点个数之差绝对值≤k≤k,所以可以考虑dp,fi,jfi,j表示到点ii,汉堡的点个数减可乐的点的个数为jj的最短距离,注意一下负下标处理,然后跑个dij就完事了 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib...
[bzoj5511]大中锋的游乐场 记可乐为1,汉堡为-1,即求过程中绝对值不超过k的最短路。 然后发现k的范围仅为10,也就是说过程中合法的值仅有21种,因此跑一遍dij或spfa(嘿嘿嘿)即可。 View Code