Cod sursa(job #1443705)

Utilizator FiliutaMariusFMI Filiuta Marius FiliutaMarius Data 28 mai 2015 15:06:33
Problema Asmax Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 1.14 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
//long long mat[16001][16001];
vector<long long> mat[16001],v;
bool iz[16001];
long long M=-16000000;
long long dfs(long long n, long long nod)
{
    long long suma=0,x;
    iz[nod]=true;
    for(int i=0;i<mat[nod].size();i++)
        if(iz[mat[nod][i]]==false )
        {
            x=dfs(n,mat[nod][i]);
            if(x>0)
                suma+=x;

        }
    if(suma+v[nod]>0 && suma+v[nod]>M)
        M=suma+v[nod];
    if(suma+v[nod]>0)
        return suma+v[nod];
    else
        return 0;
}
int main ()
{
    long long n,x,y,max,sum;
    ifstream in("asmax.in");
    ofstream out("asmax.out");
    in>>n;
    for(int i=1;i<=n;i++)
    {
        in>>x;
        v.push_back(x);
        if(i==1)
            max=x;
        else
            if(x>max)
                max=x;
    }
    for(int i=0;i<n;i++)
    {
        in>>x>>y;
        mat[x-1].push_back(y-1);
        mat[y-1].push_back(x-1);
    }
    sum=dfs(n,0);
    if(M>sum)
        out<<M;
    else
    if(sum==0)
        out<<max;
    else
        out<<sum;

}