Pagini recente » Cod sursa (job #509693) | Cod sursa (job #1144642) | Cod sursa (job #1787415) | Cod sursa (job #1925475) | Cod sursa (job #1055939)
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
vector<int>g[15001];
int v[15001], c[15001], viz[15001];
void DF(int nod)
{
int i, max=-10000000;
viz[nod]=1;
for(i=0; i<g[nod].size(); i++)
{
if(viz[g[nod][i]]==0)
DF(g[nod][i]);
if(v[g[nod][i]]>max)
max=v[g[nod][i]];
}
if(max<0)
v[nod]=c[nod];
else
v[nod]=c[nod]+max;
}
int main()
{
FILE *fin, *fout;
fin=fopen("easygraph.in", "r");
fout=fopen("easygraph.out", "w");
int t, i, j, max, x, y, n, m;
fscanf(fin, "%d", &t);
for(i=0; i<t; i++)
{
fscanf(fin, "%d %d", &n, &m);
for(j=1; j<=n; j++)
{v[j]=0;
viz[j]=0;
g[j].clear();
}
for(j=1; j<=n; j++)
fscanf(fin, "%d", &c[j]);
for(j=0; j<m; j++)
{fscanf(fin, "%d %d", &x, &y);
g[x]. push_back(y);
}
int ok, nevizitat;
ok=1;
nevizitat=1;
while(ok==1)
{
ok=0;
DF(nevizitat);
for(j=0; j<=n; j++)
if(viz[j]==0)
{nevizitat=j;
ok=1;
break;
}
}
max=-10000000;
for(j=1; j<=n; j++)
if(v[j]>max)
max=v[j];
fprintf(fout, "%d\n", max);
}
}