Cod sursa(job #2188058)

Utilizator rrobertBulgaru Robert rrobert Data 26 martie 2018 21:54:56
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <climits>

using namespace std;

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

vector<int> graph[16001];

int N,x,y,maxi=-INT_MAX;
int v[160001],dp[160001];
int visited[160001];

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

void DFS_VISIT(int u) {
	dp[u]=v[u];
	visited[u]=1;

	for (unsigned int x=0;x<graph[u].size();x++) {
		if (!visited[graph[u][x]]) {
			DFS_VISIT(graph[u][x]); 
			dp[u]=max(dp[u],dp[u]+dp[graph[u][x]]);
		}
	}

}

void DFS() {
	for (int i=1;i<=N;i++)
		if (!visited[i])
			DFS_VISIT(i);
}

int main() {
	in>>N;

	for (int i=1;i<=N;i++) {
		in>>v[i];
		visited[i]=0;
	}

	for (int i=0;i<N-1;i++) {
		in>>x>>y;
		graph[x].push_back(y);
		graph[y].push_back(x);
	}

	DFS();

	for (int i=1;i<=N;i++)
		if (maxi<dp[i])
			maxi=dp[i];

	out<<maxi;

	in.close();
	out.close();
	return 0;
}