Pagini recente » Cod sursa (job #722255) | Cod sursa (job #1639548) | Cod sursa (job #1283413) | Cod sursa (job #2774898) | Cod sursa (job #1443693)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
//long long mat[16001][16001];
vector<long long> mat[16001],v;
bool iz[16001];
long long dfs(long long n, long long nod)
{
long long suma=0,x;
for(int i=0;i<mat[nod].size();i++)
if(iz[i]==false && (mat[nod][i] || mat[i][nod]) )
{
iz[nod]=true;
x=dfs(n,i);
if(x>0)
suma+=x;
}
if(suma+v[nod]>0)
return suma+v[nod];
else
return 0;
}
int main ()
{
long long n,x,y,max,sum;
ifstream in("asmax.in");
ofstream out("asmax.out");
in>>n;
for(int i=1;i<=n;i++)
{
in>>x;
v.push_back(x);
if(i==1)
max=x;
else
if(x>max)
max=x;
}
for(int i=0;i<n;i++)
{
in>>x>>y;
//mat[x][y]=mat[y][x]=1;
mat[x].push_back(y);
mat[y].push_back(x);
}
sum=dfs(n,1);
if(sum==0)
out<<max;
else
out<<sum;
}