Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int MAXN = 10005;
- int w[MAXN];
- vector<vector<int> > adj(MAXN);
- int ans[MAXN];
- int dfs(int cur) {
- if (ans[cur] != 0)
- return ans[cur];
- int res = 0;
- for (int i = 0; i < adj[cur].size(); ++i) {
- res = max(res, dfs(adj[cur][i]));
- }
- return ans[cur] = res + w[cur];
- }
- int main() {
- int N, M; cin >> N >> M;
- for (int i = 0; i < N; ++i)
- cin >> w[i];
- for (int i = 0; i < M; ++i) {
- int x, y; cin >> x >> y;
- adj[--y].push_back(--x);
- }
- for (int i = 0; i < N; ++i)
- dfs(i);
- int res = 0;
- for (int i = 0; i < N; ++i)
- res = max(res, ans[i]);
- cout << res;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement