Pagini recente » Istoria paginii runda/sim9car | Cod sursa (job #2168053) | Cod sursa (job #1565962) | Cod sursa (job #767258) | Cod sursa (job #2195848)
# include<bits/stdc++.h>
using namespace std;
vector <int> v[20000];
int dp[20000],n,sol=-1001;
char viz[20000];
void dfs(int p)
{
if(viz[p]) return;
viz[p]=1;
int s = v[p].size();
//cout<<"p="<<p<<'\n';
for(int f=0;f<s;f++){
dfs(v[p][f]);
if(viz[v[p][f]]==2)
dp[p]=max(dp[p],dp[v[p][f]]+dp[p]);
}
sol=max(sol,dp[p]);
viz[p]=2;
//cout<<"sol = "<<sol<<'\n';
//for(int i=1;i<=n;i++) cout<<dp[i]<<' ';
//cout<<'\n';
}
int main(){
ifstream fin("asmax.in");
ofstream fout("asmax.out");
fin>>n;
memset(viz,0,n);
for(int i=1;i<=n;i++)
fin>>dp[i];
/*for(int i=1;i<=n;i++)
cout<<dp[i]<<' ';
cout<<'\n'; */
int a,b;
for(int i=1;i<n;i++){
fin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
/*for(int i=1;i<=n;i++){
cout<<i<<": ";
for(int j=0;j<v[i].size();j++)
cout<<v[i][j]<<' ';
cout<<'\n';
}*/
int x = rand()%n+1;
dfs(x);
fout<<sol;
return 0;
}