Cod sursa(job #2022013)

Utilizator Dan_RadulescuRadulescu Dan Dan_Radulescu Data 15 septembrie 2017 13:00:14
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
#define MAX 16001
using namespace std;

FILE *f1 = fopen("asmax.in", "r");
FILE *f2 = fopen("asmax.out", "w");

int n, i, a, b, maxs = -1001, sw = 0, v[MAX], val[MAX], intern[MAX];
vector<int> G[MAX];

int DFS(int node)
{
    int i, va, c;
    v[node] = 1;
    va = val[node];
    for (i = 0; i < G[node].size(); i++)
        if (v[G[node][i]] == 0)
        {
            c = DFS(G[node][i]);
            if (c > 0)
                va += c;
        }
    if (maxs < va)
        maxs = va;
    return va;
}

int main()
{
    fscanf(f1, "%d", &n);

    for (i = 1; i <= n; i++)
    {
        fscanf(f1, "%d", &val[i]);
        if (maxs < val[i])
            maxs = val[i];
        if (val[i] > 0)
            sw = 1;
    }

    for (i = 1; i <= n; i++)
    {
        fscanf(f1, "%d%d", &a, &b);
        G[a].push_back(b);
        intern[b] = 1;
    }

    if (sw == 0)
        fprintf(f2, "%d\n", maxs);
    else
    {
        for (i = 1; i <= n; i++)
            if (intern[i] == 0)
                break;
        maxs = -1001;
        DFS(i);
        fprintf(f2, "%d\n", maxs);
    }

    fclose(f1);
    fclose(f2);
    return 0;
}