站外题求助(悬2关)
  • 板块学术版
  • 楼主nzy2011
  • 当前回复59
  • 已保存回复59
  • 发布时间2023/7/31 22:03
  • 上次更新2023/11/3 06:40:06
查看原帖
站外题求助(悬2关)
976347
nzy2011楼主2023/7/31 22:03

武侠梦

Description

按武侠小说的套路,男主一般都会掉下山崖,然后捡到一堆武侠秘籍........

现在小J就遇到了这样的事,他手上拿着一堆武侠秘籍,其中最强的是九阳真经,但问题是学九阳真经前,要先学九阴真经

学九阴真经之前又可以要学一堆的前置技能............

现在给你每个秘籍本身的学习时间,及它们前置技能的相关信息

问你小J至少要花多长的时间才能学会九阳真经,学成之后,他就可以开开心心的去做个扫地僧了

Format

Input

第一行给出N,代表有N种功夫

接下来N行,每行描述一种功夫的相关信息,格式如下

先给出学习这种功夫要花的时间Ti,再给出这种功夫有多少个前置功夫Ki,再给出每个前置功夫的编号

1<=N<=2e5

1<=Ti<=1e9

0<=Ki<i

Output

如题

Samples

输入数据 1

3
3 0
5 1 1
7 1 1      

输出数据 1

10

Hint

先学功夫1,花了3个时间,然后直接学功夫3,花7个时间

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int b[200000],t[200000],a[100000][1000];
int n,m,s;
int f(int x){
	int s=10000000000000000;
	if(b[x]) return b[x];
	if(a[x][0]==0||x==1) return t[x];
	else{
		for(int i=1;i<=a[x][0];i++){
			s = min(s,f(a[x][i])+t[x]);
		}
	}
	b[x] = s;
	return s;
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>t[i];
		cin>>a[i][0];
		for(int j=1;j<=a[i][0];j++){
			cin>>a[i][j];
		}
	}
	cout<<f(n);
    return 0;
}

A2

W2

ME 2

2023/7/31 22:03
加载中...