Pagini recente » Cod sursa (job #1265467) | Cod sursa (job #1110989) | Cod sursa (job #2949054) | Cod sursa (job #915616) | Cod sursa (job #1130842)
#include<stdio.h>
#include<list>
#define MaxN 16005
#define maxw(a,b) a>b ? a:b
using namespace std;
int n,maxv,best[MaxN];
bool viz[MaxN];
list<int> G[MaxN];
void DF(int node)
{
viz[node] = 1;
for(list<int>::iterator it = G[node].begin(); it!=G[node].end(); it++)
{
if(!viz[*it])
{
DF(*it);
best[node] = maxw(best[node],best[node]+best[*it]);
maxv = maxw(maxv,best[node]);
}
}
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
maxv = -20000;
scanf("%d",&n);
for(int i=1; i<=n;i++)
{
scanf("%d",&best[i]);
if( maxv < best[i])
maxv = best[i];
}
int x,y;
while(1)
{
scanf("%d %d",&x,&y);
if(feof(stdin))
break;
G[x].push_back(y);
G[y].push_back(x);
}
for(int i=1;i<=n; i++)
if(!viz[i])
DF(i);
for(int i=1;i<=n;i++)
printf("%d ",best[i]);
printf("/n");
printf("%d",maxv);
}