Cod sursa(job #2518379)

Utilizator bodea.georgianaBodea Georgiana bodea.georgiana Data 5 ianuarie 2020 17:05:31
Problema Asmax Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <iostream>
#define N 16002
#include <vector>
#include <deque>
#define INF 200000000

using namespace std;

int c[N],ma;
vector <int> graph[N];
bool viz[N];
int sum[N];///sum[i]- suma din subarborele cu radacina in i inclusiv costul radacinii
int mfii[N];///mfii[i]-suma maxima dintre sumele subarborilor nodului i
int maxim[N];
void low(int nod)
{
    int ve;
    sum[nod]=c[nod];
    viz[nod]=1;
    for(int i=0;i<graph[nod].size();++i)
    {
        ve=graph[nod][i];
        if(!viz[ve])
        {
            low(ve);
            viz[ve]=1;
            sum[nod]=sum[nod]+sum[ve];
            mfii[nod]=max(mfii[nod],sum[ve]);
        }
    }
}
int main()
{
    ifstream f("asmax.in");
    ofstream g("asmax.out");
    int n,x,y,ss=0;
    f>>n;
    for(int i=1;i<=n;++i) f>>c[i],ss+=c[i];
    for(int i=1;i<=n;++i)
    {
        f>>x>>y;
        graph[x].push_back(y);
        graph[y].push_back(x);
    }
    for(int i=1;i<=n;++i)
        mfii[i]=-INF;
    low(1);
    for(int i=1;i<=n;++i)
        ma=max(ma,max(ss-sum[i]+c[i],mfii[i]+c[i]));
    g<<ma;
    f.close();
    g.close();
    return 0;
}