Pagini recente » Cod sursa (job #379296) | Cod sursa (job #2218391) | Cod sursa (job #2324218) | Cod sursa (job #72860) | Cod sursa (job #2932627)
#include <bits/stdc++.h>
using namespace std;
vector<vector<long long>> v;
vector<long long> visited, departureNodes, cost;
ifstream fin("easygraph.in");
ofstream fout("easygraph.out");
long long n,m,maxi;
void dfs(int nod)
{
visited[nod] = 1;
long long currentMax = 0;
for(int i=0; i<v[nod].size(); i++)
{
if(visited[v[nod][i]] == 0)
dfs(v[nod][i]);
currentMax = max(currentMax, cost[v[nod][i]]);
}
cost[nod] += currentMax;
maxi = max(maxi, cost[nod]);
}
int main()
{
int t,a,b;
fin>>t;
for(int test = 1; test <= t; test++)
{
fin>>n>>m;
visited.clear();
visited.resize(n+2);
departureNodes.clear();
departureNodes.resize(n+2);
v.clear();
v.resize(n+2);
cost.clear();
cost.resize(n+2);
for(int i=1; i<=n; i++)
{
fin>>cost[i];
}
for(int i=1; i<=m; i++)
{
fin>>a>>b;
v[a].push_back(b);
departureNodes[b] = 1; //1 - intra ceva in nod deci exista un nod superior din care sa plecam sa ajugem si aici
}
maxi = LLONG_MIN;
for(int i=1; i<=n; i++)
if(departureNodes[i] == 0)
dfs(i);
fout<<maxi<<'\n';
}
return 0;
}