Cod sursa(job #1233191)

Utilizator catalincraciunCraciun Catalin catalincraciun Data 24 septembrie 2014 21:59:01
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
// Craciun Catalin
//  Asmax
//   Infoarena
#include <iostream>
#include <fstream>
#include <vector>

#define NMax 20000

using namespace std;

ifstream f("asmax.in");
ofstream g("asmax.out");

int n;
int V[NMax]; // Values
bool vis[NMax]; // Visited
vector<int> neigh[NMax]; // Neighboors
int maxim = 0;
bool found = false;

void dfs(int nod) {

	vis[nod] = true;
	
	for (unsigned int i=0;i<neigh[nod].size();i++) {
		if (!vis[neigh[nod][i]]) {
			if (V[neigh[nod][i]] > 0) {
				V[nod]+=V[neigh[nod][i]];
				dfs(neigh[nod][i]);
			}
		}
	}
}

int main() {
	
	f>>n;
	for (int i=1;i<=n;i++) {
		f>>V[i];
	}
	for (int i=1;i<=n-1;i++) {
		int x, y;
		f>>x>>y;
		neigh[x].push_back(y);
		neigh[y].push_back(x);
	}
	
	for (int i=1;i<=n;i++) {
		if (!vis[i]) {
			dfs(i);
			if (!found) {
				maxim = V[i];
				found = true;
			} else if (maxim < V[i])
				maxim = V[i];
		}
	}
	
	g<<maxim<<'\n';
	
	f.close(); g.close();
	
	return 0;
}