Cod sursa(job #1800775)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 8 noiembrie 2016 07:50:10
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#define MAXN 16000
int cp[MAXN+1], ult[MAXN+1], ad[2*MAXN+1], next[2*MAXN+1], poz=0, val[MAXN+1];
bool viz[MAXN+1];
void adauga(int a, int b){
  ad[++poz]=b;
  next[poz]=ult[a];
  ult[a]=poz;
}

void dfs(int nod){
  viz[nod]=true;
  val[nod]=cp[nod];
  int i=ult[nod];
  while(i!=0){
    if(!viz[ad[i]]){
      dfs(ad[i]);
      if(val[ad[i]]>0)
        val[nod]+=val[ad[i]];
    }
    i=next[i];
  }
}

int main()
{
  int n, i, max, x, y;
  FILE *fi=fopen("asmax.in", "r"), *fo=fopen("asmax.out", "w");
  fscanf(fi, "%d", &n);
  for(i=1;i<=n;i++)
    fscanf(fi, "%d", &cp[i]);
  for(i=1;i<n;i++){
    fscanf(fi, "%d%d", &x, &y);
    adauga(x,y);
    adauga(y,x);
  }
  dfs(1);
  max=-2000000000;
  for(i=1;i<=n;i++)
    if(max<val[i])
      max=val[i];
  fprintf(fo, "%d", max);
  fclose(fo);
  fclose(fi);
  return 0;
}