天生我材必有难,千金散尽还债来 • 8个月前
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<int> list[10006];
int vis[10006],time2[10006],time1[10006],ans=0;
queue<int> Q;
int main() {
int n;
cin >> n;
for (int k = 1; k <= n; k++) {
int bianhao, time, befor;
cin >> bianhao >> time;
time1[bianhao]=time;
time2[bianhao]=time;
ans=max(ans,time);
for (cin >> befor; befor > 0; cin >> befor) {
list[befor].push_back(bianhao);
vis[bianhao]++;
}
}
for (int k = 1; k <= n; k++) {
if (vis[k] == 0) {
Q.push(k);
}
}
while (!Q.empty()) {
int node = Q.front();
Q.pop();
//cout << node << " ";
for (int i:list[node]) {
vis[i]--;
time2[i]=max(time1[i]+time2[node],time2[i]);
//cout<<i<<"*"<<time2[i]<<" ";
ans=max(time2[i],ans);
if (vis[i] == 0) {
Q.push(i);
}
}
//cout<<endl;
}
cout<<ans;
return 0;
}
评论:
请先登录,才能进行评论