Pagini recente » Cod sursa (job #2945569) | Cod sursa (job #2547877) | Cod sursa (job #2706239) | Cod sursa (job #2778583) | Cod sursa (job #1874977)
#include <bits/stdc++.h>
#define nmax 15005
using namespace std;
ifstream in("easygraph.in");
ofstream out("easygraph.out");
stack < int > st;
vector <int> v[nmax],transpus[nmax];
int c[nmax];
long long s[nmax];
bool viz[nmax];
void dfs(int nod)
{
int i;
viz[nod]=1;
for(i=0;i<v[nod].size();i++)
if(!viz[v[nod][i]])
dfs(v[nod][i]);
st.push(nod);
}
int main()
{int t,n,i,m,j,a,b;
in>>t;
while(t--)
{
for(i=1;i<=nmax;i++)
{
viz[i]=c[i]=0;
if(v[i].size())
v[i].clear();
if(transpus[i].size())
transpus[i].clear();
while(st.size())
st.pop();
}
in>>n>>m;
for(i=1;i<=n;i++)
in>>c[i];
for(i=1;i<=m;i++)
{
in>>a>>b;
v[a].push_back(b);
transpus[b].push_back(a);
}
for(i=1;i<=n;i++)
if(!viz[i])
dfs(i);
long long maxi=LONG_LONG_MIN;
int nod;
while(!st.empty())
{
nod=st.top();
st.pop();
s[nod]=c[nod];
for(i=0;i<transpus[nod].size();i++)
s[nod]=max(s[nod],s[transpus[nod][i]]+c[nod]);
maxi=max(maxi,s[nod]);
}
out<<maxi<<'\n';
}
return 0;
}