#include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int N = 10005; int n, ti[N], dp[N]; vector<int> g[N]; int dfs(int u) { if (dp[u] != -1) return dp[u]; dp[u] = ti[u]; int Max = 0; for (int i = 0; i < g[u].size(); i++) { int v = g[u][i]; Max = max(Max, dfs(v)); } dp[u] += Max; return dp[u]; } int main() { while (~scanf("%d", &n)) { for (int i = 1; i <= n; i++) { g[i].clear(); scanf("%d", &ti[i]); int tot; scanf("%d", &tot); while (tot--) { int v; scanf("%d", &v); g[i].push_back(v); } } int ans = 0; memset(dp, -1, sizeof(dp)); for (int i = 1; i <= n; i++) ans = max(ans, dfs(i)); printf("%d\n", ans); } return 0; } |
Double click to view unformatted code.