Pagini recente » Cod sursa (job #1586727) | Cod sursa (job #1042852) | Cod sursa (job #112252) | Cod sursa (job #926824) | Cod sursa (job #2371454)
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream citeste("asmax.in");
ofstream scrie("asmax.out");
const int nmax = 16001;
vector<int> adj[nmax];
bool visited[nmax];
int val[nmax], valmax[nmax];
int dfs(int i)
{
if(visited[i]) return valmax[i];
visited[i] = true;
int valc = val[i];
//cout<<i<<" "<<valc<<"\n";
for(int j=0;j<adj[i].size();j++)
{
valc = max(valc, valc + dfs(adj[i][j]));
//cout<<i<<" "<<adj[i][j]<<" "<<valc<<"\n";
}
valmax[i] = valc;
return valc;
}
int main()
{
int n;
citeste>>n;
for(int i=1;i<=n;i++)
{
visited[i] = false;
citeste>>val[i];
valmax[i] = val[i];
}
for(int i=1;i<=n-1;i++)
{
int a,b;
citeste>>a>>b;
bool ok = true;
/*for(int j=0;j<adj[a].size();j++)
if(adj[a].at(j) == b)
{
ok = false;
break;
}
*/
if(ok)
{
adj[a].push_back(b);
adj[b].push_back(a);
}
}
dfs(1);
int vmax = valmax[1];
for(int i=2;i<=n;i++)
{
vmax = max(vmax, valmax[i]);
}
scrie<<vmax;
}