洛谷 P1113 杂务 (图论,AOE网,递推)

https://www.luogu.com.cn/problem/P1113

思路

题意应该是这些杂务是个AOE网,要完成一个杂务首先要满足完成它的准备任务,所以每个任务的最早开始时间就是它的所有准备任务的最晚完成时间,这样直接递推一下即可

代码
#include 
#include 
#include 
using namespace std;
const int N = 100005;

int n, ans;
int dp[N];
vector <int> g[N];

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		int id, len, x;
		cin >> id >> len;
		dp[id] = len;
		while (1) {
			cin >> x;
			if (!x) break;
			g[id].push_back(x);
		}
	}
	for (int i = 1; i <= n; i++) {
		int temp = 0;
		for (int j = 0; j < g[i].size(); j++) {
			temp = max(temp, dp[g[i][j]]);
		}
		dp[i] += temp;
		ans = max(ans, dp[i]);
	}
	cout << ans << endl;
	return 0;
}

你可能感兴趣的:(随笔,code,图论)