Cod sursa(job #1891703)

Utilizator Mstar_AngelComan Mara Stefania Mstar_Angel Data 24 februarie 2017 11:36:28
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>
#include<vector>
#define N 16001
#define MIN -20000000
using namespace std;
vector <int> v[N];
int val[N];
int jos[N],sus[N];
int smax;
void dfs(int nods){
  int i,nod;
  for (i=0;i<v[nods].size ();i++){
    nod = v[nods][i];
    sus[nod] = sus[nods] + sus[nod] > sus[nod] ? sus[nods] + sus[nod] : sus[nod];
    smax = smax > sus[nod] ? smax : sus[nod];
    dfs (nod);
    jos[nods] = jos[nod] + jos[nods] > jos[nods] ? jos[nod] + jos[nods] : jos[nods] ;
    smax = smax > jos[nods] ? smax : jos[nods];
  }
}

int main (){
  FILE *in,*out;
  in = fopen ("asmax.in","r");
  out = fopen ("asmax.out","w");
  int n,i,rad,n1,n2;
  fscanf (in,"%d",&n);
  for (i=1;i<=n;i++){
    fscanf (in,"%d",&val[i]);
    sus[i] = jos[i] = val[i];// init
  }
  rad = n*(n+1)/2;
  for (i=1;i<=n-1;i++){
    fscanf (in,"%d%d",&n1,&n2);
    v[n1].push_back(n2);
    rad -= n2;
  }

  smax = MIN;
  for (i=1;i<=n;i++)
    smax = smax > val[i] ? smax : val[i];

  dfs (rad);

  fprintf(out,"%d",smax);

  fclose (in);
  fclose (out);
  return 0;
}