Pagini recente » Cod sursa (job #3039677) | Cod sursa (job #734765) | Cod sursa (job #1485393) | Cod sursa (job #35038) | Cod sursa (job #1426955)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
vector <int> Muchii[16010];
int n,m = 1,v[16010],viz[16010],grad[16010];
int DFS(int nod)
{
viz[nod] = 1;
for(int i = 0; i < Muchii[nod].size(); ++i)
{
if(!viz[Muchii[nod][i]])
{
grad[nod]--;
v[nod] += DFS(Muchii[nod][i]);
}
}
if(grad[nod] <= 1)
{
if(v[nod] > 0)
return v[nod];
else
return 0;
}
}
int main()
{
fstream f("asmax.in", ios::in);
fstream g("asmax.out", ios::out);
f>>n;
for(int i = 1; i <= n; ++i)
f>>v[i];
for(int i = 1; i < n; ++i)
{
int x,y;
f>>x>>y;
grad[x]++;
grad[y]++;
Muchii[x].push_back(y);
Muchii[y].push_back(x);
}
while(grad[m] == 1 && m < n)
m++;
g<<DFS(m);
return 0;
}