Cod sursa(job #1439029)

Utilizator DiClauDan Claudiu DiClau Data 21 mai 2015 12:13:36
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
using namespace std;
const int N = 16001;
int v[N], nr = 0, vf[2 * N], lst[N], urm[2 * N], s[N], maxim = -100000000;
bool viz[N];
void adauga(int x, int y)
{
    nr++;
    vf[nr] = y;
    urm[nr] = lst[x];
    lst[x] = nr;
}
void dfs (int x)
{
    int p, y;
    s[x] = v[x];
    p = lst[x];
    viz[x] = true;
    while (p != 0)
    {
        y = vf[p];
        if (viz[y] == false)
        {
            dfs(y);
            if (s[y] > 0)
                s[x] += s[y];
        }
        p = urm[p];
    }
    if (s[x] > maxim)
        maxim = s[x];
}
int main ()
{
    FILE *in, *out;
    in = fopen ("asmax.in", "r");
    out = fopen ("asmax.out", "w");
    int n;
    fscanf (in, "%d", &n);
    int i;
    for (i = 1; i <= n; i++)
        fscanf (in, "%d", &v[i]);
    int x, y;
    for (i = 1; i <= n; i++)
    {
        fscanf (in, "%d%d", &x, &y);
        adauga(x, y);
        adauga(y, x);
    }
    dfs(1);
    fprintf (out, "%d", maxim);
    return 0;
}