讨论区遍历计划-------0016号

天生我材必有难,千金散尽还债来  •  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;
}

评论:

请先登录,才能进行评论