【JZOJ A组】 大逃杀

2024-02-25 09:20
文章标签 jzoj 大逃杀

本文主要是介绍【JZOJ A组】 大逃杀,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

自从 Y 君退役之后,她就迷上了吃鸡,于是她决定出一道吃鸡的题。
Y 君将地图上的所有地点标号为 1 到 n,地图中有 n − 1 条双向道路连接这些点,通过一条 双向道路需要一定时间,保证从任意一个点可以通过道路到达地图上的所有点。
有些点上可能有资源,Y 君到达一个有资源的点后,可以选择获取资源来使自己的武力值增 加 wi,也可以选择不获取资源。如果 Y 君获取了一个点上的资源,这个点上的资源就会消失,获 取资源不需要时间。
有些点上可能有敌人,Y 君到达一个有敌人的点后,必须花费 ti 秒伏地与敌人周旋,并最终 将敌人消灭。如果 Y 君消灭了一个点上的敌人,这个点上的敌人就会消失。Y 君不能无视敌人继 续前进,因为这样会被敌人攻击。
如果一个点上既有资源又有敌人,Y 君必须先消灭敌人之后才能获取资源,否则就会被敌人 突袭。
游戏开始时,Y 君可以空降到任意一个点上,接下来,她有 T 秒进行行动,T 秒后她就必须 前往中心区域送快递。Y 君希望她前往中心区域送快递时,武力值尽可能大,请你帮助 Y 君设计 路线,以满足她的要求。你只需输出 T 秒后 Y 君的武力值。

Input

第一行由单个空格隔开的两个正整数 n, T,代表点数和时间。
第二行 n 个由单个空格隔开的非负整数代表 wi,如果 wi = 0 代表该点没有武器,
第三行 n 个由单个空格隔开的非负整数代表 ti,如果 ti = 0 代表该点没有敌人。
接下来 n − 1 行每行由单个空格隔开的 3 个非负整数 a, b, c 代表连接 a 和 b 的双向道路,通 过这条道路需要 c 秒。

Output

输出一行一个整数代表 T 秒后 Y 君的武力值。

Sample Input

17 54
5 5 1 1 1 25 1 10 15 3 6 6 66 4 4 4 4
0 1 3 0 0 0 1 3 2 0 6 7 54 0 0 0 0
1 8 3
2 8 3
8 7 7
7 13 0
7 14 0
15 14 2
16 14 3
17 14 5
7 9 4
9 10 25
10 11 0
10 12 0
7 6 20
3 6 3
3 4 3
3 5 3

Sample Output

68

Data Constraint

思路

这题跟之前叫“餐馆”那题很像。

这题的不同点是

  1. 每个点多了一个权值
  2. 这是一棵无根树

第一个条件只要计算时加上就好了
可是第二个条件。。。

所以我们要比之前多考虑一种情况

用 f(i, j) 代表进入以 i 为根的子树并回到 i,g(i, j) 代表进入以 i 为根的子树并不回到 i,h(i, j) 代表从以 i 为根的子树内出发,经过 i 并回到以 i 为根的子树内,用 j 秒能得到的最大武力值。

这里一个dfs就可以了。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=377,inf=0x3f3f3f3f;
struct E
{int to,next,v;
}e[maxn*2];
int n,m,a[maxn],t[maxn],f[maxn][maxn][3],list[maxn],cnt=0,d[maxn][3],ans;
void add(int u,int v,int val)
{e[++cnt].to=v; e[cnt].next=list[u]; list[u]=cnt; e[cnt].v=val;
}
void dfs(int u,int fa)
{for(int i=0; i<=m; i++){f[u][i][0]=f[u][i][1]=f[u][i][2]=i>=t[u]?a[u]:-inf;}for(int i=list[u]; i; i=e[i].next){int v=e[i].to;if(v==fa) continue;dfs(v,u);memcpy(d,f[u],sizeof(d));for(int j=0; j<=m; j++) for(int k=0; k<=m-j; k++){int ti;if((ti=j+k+2*e[i].v)<=m){f[u][ti][0]=max(f[u][ti][0],d[j][0]+f[v][k][0]);f[u][ti][1]=max(f[u][ti][1],d[j][1]+f[v][k][0]);f[u][ti][2]=max(f[u][ti][2],d[j][2]+f[v][k][0]);f[u][ti][2]=max(f[u][ti][2],d[j][0]+f[v][k][2]);}if((ti=j+k+e[i].v)<=m){f[u][ti][1]=max(f[u][ti][1],d[j][0]+f[v][k][1]);f[u][ti][2]=max(f[u][ti][2],d[j][1]+f[v][k][1]);}}}ans=max(ans,max(f[u][m][0],max(f[u][m][1],f[u][m][2])));
}
int main()
{scanf("%d%d",&n,&m);for(int i=1; i<=n; i++) scanf("%d",&a[i]);for(int i=1; i<=n; i++) scanf("%d",&t[i]);for(int i=1; i<=n-1; i++){int x,y,v;scanf("%d%d%d",&x,&y,&v);add(x,y,v); add(y,x,v);}dfs(1,0);printf("%d",ans);
}

这篇关于【JZOJ A组】 大逃杀的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745050

相关文章

Jzoj 条件循环(while,do while) 部分代码(共25题)

1020: 【入门】编程求1+3+5+...+n #include <bits/stdc++.h>using namespace std;int n, sum;int main() {scanf("%d", &n);for(int i=1; i<=n; i+=2){sum+=i;} printf("%d", sum);return 0;} 1012: 【入门】两数比大小 #i

Jzoj 二维数组部分代码(共13题)

2788: 【入门】二维数组的输入输出 边输入边输出 #include <bits/stdc++.h>using namespace std;int n, m, a[11][11];int main(){scanf("%d %d", &n, &m);//边输入边输出for(int i=1; i<=n; ++i){for(int j=1; j<=m; ++j){scanf("%d", &

潮玩宇宙Dapp游戏:密室大逃杀的魅力探索

在潮玩宇宙这片充满创意与激情的虚拟世界中,一款名为“密室大逃杀”的Dapp游戏凭借其独特的玩法和紧张刺激的氛围,迅速成为了玩家们热衷的焦点。这款游戏不仅融合了传统的密室逃脱元素,还巧妙地结合了区块链技术,为玩家带来了全新的游戏体验。 游戏背景与玩法 “密室大逃杀”是一款以密室逃脱为主题的多人在线竞技游戏。游戏中有多个房间供用户选择,玩家需通过选择房间进行躲藏,选完房间之后选择相对应的代币数

潮玩宇宙小程序定制大逃杀游戏APP开发H5游戏

游戏名称:潮玩宇宙大逃杀 游戏类型:休闲竞技类小游戏 游戏目标:玩家通过选择房间躲避杀手,生存下来并瓜分被杀房间的元宝。 核心功能 房间选择:玩家进入游戏后,可以选择一间房间躲避杀手。杀手行动:当满足一定人数后,杀手随机挑选一个房间杀掉里面所有的参与者。元宝瓜分:其他房间的幸存者将平均瓜分被杀房间的元宝。积分投入:玩家可以选择增加投入的积分数,投入越多,瓜分到的元宝也越多。房间切换:玩家在

jzoj 5770 可爱精灵宝贝

题目 题解 –是区间dp(好像dfs加神秘玄学剪枝也能过?) 首先,我们可以发现这个人走过的位置是一个区域,而且区域内部的精灵要么被抓,要么消失了(总之就是与以后的转移没有关系) 所以,状态定义: f[l][r][t] :当这个人走过区间[l,r],且目前在l处,时间为t时的最大分值 注意,l,r的左右位置要根据大小自己判断 然后我们又发现,现在这个人只有两种方法:左走或右走

[离散化][区间DP]JZOJ 5770 可爱精灵宝贝

日常黑Pokeman Go Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家。最近,他闲得没事组织了一场捉精灵的游戏。游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n。 刚开始玩家在k号房子前。有m个精灵,第i只精灵在第A[i]栋房子前,分值是B[i],以及它在T[i]秒内(含)存在,之后消失。Branimirko可以选择移动至相邻的房子,耗时

[权值线段树]JZOJ 3236 矮人排队

Description 在七山七海之外的一个小村庄,白雪公主与N个矮人住在一起,所有时间都花在吃和玩League of Legend游戏。白雪公主决心终结这样的生活,所以为他们举办了体育课。 在每节课开始时,矮人必须按他们的身高站队。假定矮人们有高度1,2,...,N(每个人高度互不相同)。然而,由于不健康的生活方式,矮人的智力有所恶化,所以他们没有能力依照自己的高度排序。 因此,白雪公主发

JZOJ 1495. 宝石(附加扫描线讲解)

JZOJ 1495. 宝石 题目大意:给你N个 ( K + 1 ) × ( K + 1 ) (K+1)\times(K+1) (K+1)×(K+1)的正方形以及他们左上角的那个顶点的坐标和它的权值,求最大的覆盖的权值。 这一题可以用二维前缀和做,但是无法拿到满分。 满分做法:扫描线。 假如现在有这么两个长方形,权值都为1(不要问为什么是长方形,这里只是为了方便讲解而已),它们摆放如图: 首

《绝地求生大逃杀》BE错误怎么办 BE服务未正常运行及安装失败解决方法

《绝地求生大逃杀》BattlEye Launcher是游戏的反作弊程序,也是启动过程中做容易出现错误的,今天闲游盒带来“爆锤吧务”分享的《绝地求生大逃杀》BE服务未正常运行及安装失败解决方法,有此烦恼的玩家赶紧来看吧。 在启动游戏之前切换成英文输入法,美式键盘。 DLL文件的各种问题 dxgi.dll,d3d11.dll,uxtheme.dll,JiXunlsp641.4.dll

[数位dp][斯特林反演] Jzoj P5765 相互再归的鹅妈妈

Description Input Output Sample Input Input 13 1101Input 24 310Input 35 1001 Sample Output Output 11Output 21978Output 3598192244 Data Constraint 对于所有数据,保证