Cod sursa(job #1882798)

Utilizator penetavyPene Cosmin-Octavian penetavy Data 17 februarie 2017 15:02:56
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <vector>

#define MAX_N 16000

using namespace std;

//struct anakin{
//  int next, cost;
//};

vector <int> graf[MAX_N + 1];

int d[MAX_N + 1];

int N;
int c[MAX_N + 1];
bool seen[MAX_N + 1];
int sol = -999999999;

int MAX(int a, int b) {
  return a > b ? a : b;
}

void DFS(int u) {
  seen[u] = 1;
  bool ok = 0;
  vector <int> ::iterator it;
  it = graf[u].begin();
  for (it = graf[u].begin(); it != graf[u].end(); it++) {
    if (!seen[*it]){
      DFS(*it);
      ok = 1;
      d[u] = MAX(d[*it] + d[u], d[u]);
      if (sol < d[u])
        sol = d[u];
    }
  }

  if (ok == 0) {
    d[u] = c[u];
  }
}

int main(){

  FILE *fin = fopen("asmax.in", "r");
  FILE *fout = fopen("asmax.out", "w");

  int i, j;
  int nr;
  int a, b;
  fscanf(fin, "%d", &N);
  for (i = 1; i <= N; i++) {
      fscanf(fin, "%d", &c[i]);
      d[i] = c[i];
  }

  for (i = 1; i <= N - 1; i++) {
    fscanf(fin, "%d %d", &a, &b);
    graf[a].push_back(b);
    graf[b].push_back(a);
  }

  DFS(1);

  for (i = 1; i <= N; i++)
    printf("%d ", d[i]);

  fprintf(fout, "%d\n", sol);

  return 0;
}