Cod sursa(job #2022016)

Utilizator Dan_RadulescuRadulescu Dan Dan_Radulescu Data 15 septembrie 2017 13:05:49
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 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];
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);
        G[b].push_back(a);
    }

    if (sw == 0)
        fprintf(f2, "%d\n", maxs);
    else
    {
        maxs = -1001;
        DFS(1);
        fprintf(f2, "%d\n", maxs);
    }

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