Cod sursa(job #1443697)

Utilizator FiliutaMariusFMI Filiuta Marius FiliutaMarius Data 28 mai 2015 14:57:20
Problema Asmax Scor 20
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 1.16 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;
    for(int i=0;i<mat[nod].size();i++)
        if(iz[i]==false && (mat[nod][i] || mat[i][nod]) )
        {
            iz[nod]=true;
            x=dfs(n,i);
            if(x>0)
                suma+=x;

        }
    if(suma>0 && suma>M)
        M=suma;
    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][y]=mat[y][x]=1;
        mat[x].push_back(y);
        mat[y].push_back(x);
    }
    sum=dfs(n,1);
    if(M>sum)
        out<<M;
    else
    if(sum==0)
        out<<max;
    else
        out<<sum;

}