好久不写了 嗯 继续一题 其实这题我一开始也没做出了 后来想了想 理通了
对于单个任务来说完成他的最快时间就是在完成他的子任务中最耗时的一个之后马上开始
那么就可以用递推 对于1而言 他的时间就是完成自己的时间 对于二而言可能要加上1的时间,也可能不加,以次递推,最后统计n个任务中最耗时的一个就可以了;
贴个代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 5;
int arr[N];
int t[N];
int main()
{
int n; cin >> n;
for (int i = 1; i <= n; i++)
{
int id; cin >> id >> t[i];
int maxnum = 0;
while (1)
{
int w; cin >> w;
if (w == 0)
{
break;
}
maxnum= max(maxnum, arr[w]);
}
arr[i] += t[i] + maxnum;
}
sort(arr + 1, arr + 1 + n);
cout << arr[n];
}