Cod sursa(job #2461774)

Utilizator stef2003Bud Stefan stef2003 Data 26 septembrie 2019 09:45:11
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <cstdio>

using namespace std;

int v[16001], vf[32001], lst[32001], urm[32001];
bool viz[16001];
int nr=0;
void adauga(int x, int y) {
  vf[++nr]=y;
  urm[nr]=lst[x];
  lst[x]=nr;
}

void dfs(int x) {
  int y, p;
  viz[x]=true;
  for(p=lst[x];p!=0;p=urm[p]) {
    y=vf[p];
    if(!viz[y]) {
      dfs(y);
      if(v[y]>0)
        v[x]+=v[y];
    }
  }
}

int main() {
  FILE *fin, *fout;
  int n, i, x, y, s;
  fin=fopen("asmax.in","r");
  fout=fopen("asmax.out","w");
  fscanf(fin, "%d",&n);
  for(i=1;i<=n;i++)
    fscanf(fin, "%d",&v[i]);
  for(i=1;i<n;i++) {
    fscanf(fin, "%d%d",&x,&y);
    adauga(x,y);
    adauga(y,x);
  }
  for(i=1;i<=n;i++) {
    if(!viz[i])
      dfs(i);
  }
  s=v[1];
  for(i=2;i<=n;i++)
    if(v[i]>s)
      s=v[i];
  fprintf(fout, "%d\n",s);;
  fclose( fin );
  fclose( fout );
  return 0;
}