Advertisement
Guest User

Untitled

a guest
Oct 18th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.73 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = 10005;
  4.  
  5. int w[MAXN];
  6. vector<vector<int> > adj(MAXN);
  7. int ans[MAXN];
  8.  
  9. int dfs(int cur) {
  10.     if (ans[cur] != 0)
  11.         return ans[cur];
  12.     int res = 0;
  13.     for (int i = 0; i < adj[cur].size(); ++i) {
  14.         res = max(res, dfs(adj[cur][i]));
  15.     }
  16.     return ans[cur] = res + w[cur];
  17. }
  18.  
  19. int main() {
  20.     int N, M; cin >> N >> M;
  21.     for (int i = 0; i < N; ++i)
  22.         cin >> w[i];
  23.     for (int i = 0; i < M; ++i) {
  24.         int x, y; cin >> x >> y;
  25.         adj[--y].push_back(--x);
  26.     }
  27.     for (int i = 0; i < N; ++i)
  28.         dfs(i);
  29.     int res = 0;
  30.     for (int i = 0; i < N; ++i)
  31.         res = max(res, ans[i]);
  32.     cout << res;
  33.     return 0;
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement