Cod sursa(job #1055939)

Utilizator jul123Iulia Duta jul123 Data 14 decembrie 2013 12:14:48
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#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);
    }
}