Pagini recente » Cod sursa (job #1768965) | Cod sursa (job #2295511) | Cod sursa (job #2349814) | Cod sursa (job #2649914) | Cod sursa (job #885993)
Cod sursa(job #885993)
// Include
#include <fstream>
#include <vector>
using namespace std;
// Definitii
#define pb push_back
// Constante
const int sz = (int)16e3+1;
const int oo = (1<<30)-1;
// Functii
int dfs(int node, int father);
// Variabile
ifstream in("asmax.in");
ofstream out("asmax.out");
int nodes;
int values[sz];
int maxSum = -oo;
vector<int> graph[sz];
// Main
int main()
{
in >> nodes;
for(int i=1 ; i<=nodes ; ++i)
in >> values[i];
int rFrom, rTo;
for(int i=1 ; i<nodes ; ++i)
{
in >> rFrom >> rTo;
graph[rFrom].pb(rTo);
graph[rTo].pb(rFrom);
}
dfs(1, -1);
out << maxSum << '\n';
in.close();
out.close();
return 0;
}
int dfs(int node, int father)
{
int sum = values[node];
vector<int>::iterator it, end=graph[node].end();
for(it=graph[node].begin() ; it!=end ; ++it)
{
if(*it == father)
continue;
int tempSum = dfs(*it, node);
if(tempSum > 0)
sum += tempSum;
}
maxSum = max(maxSum, sum);
return sum;
}