Mai intai trebuie sa te autentifici.
Cod sursa(job #174966)
Utilizator | Data | 9 aprilie 2008 13:42:06 | |
---|---|---|---|
Problema | Asmax | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.69 kb |
#include <fstream.h>
#define N 16001
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int v[N],n,viz[N],tati[N],radacina;
long long s[N];
void citire()
{
fin>>n;
int i;
for(i=1;i<=n;i++)
{
fin>>v[i];
tati[i]=0;
}
int a,b;
for(i=1;i<n;i++)
{
fin>>a>>b;
tati[b]=a;
s[i]=0;
}
for(i=1;i<=n;i++)
if(tati[i]==0)
{
radacina=i;
break;
}
}
int max(int a,int b)
{
if(a>b) return a;
return b;
}
void progdin(int nod)
{
int i;
for(i=1;i<=n;i++)
if (tati[i]==nod) progdin(i);
s[nod]=v[nod];
for(i=1;i<=n;i++)
if(tati[i]==nod)
s[nod]=max(s[nod],s[nod]+s[i]);
}
int main()
{
citire();
progdin(radacina);
fout<<s[radacina]<<'\n';
return 0;
}