洛谷原题:https://www.luogu.com.cn/problem/P1113
图论,我的思路是用vector[]存图,vector[i]表示序号为i的任务,vector[i][0]表示第i的任务所需的时间,vector[i][j](j从2开始)表示第i的任务的前驱任务
然后遍历vecotr[i][2~...]记录最大值前驱任务下标,最后用累加(sum[i]记录完成第i个任务所需的时间)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int n,a,b,sum[10005];
vector<int>c[10005];
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a>>b;
c[a].push_back(b);
while(cin>>b&&b){
c[a].push_back(b);
}
}
sum[1]=c[1][0];
for(int i=2;i<=n;i++){
int ans=i-1;
for(int j=1;j<c[i].size()-1;j++)ans=max(ans,c[i][j]);
sum[i]=sum[ans]+c[i][0];
}
cout<<sum[n];
return 0;
}