比赛 |
20111109 |
评测结果 |
TTTEEEEEEE |
题目名称 |
火车站饭店 |
最终得分 |
0 |
用户昵称 |
Makazeu |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-11-09 11:42:56 |
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
typedef unsigned short int usint;
const int MAXN=5000;
int Mon[MAXN];
usint Mat[MAXN][51];
bool tmp[MAXN];
int N;
int MAX=0;
void init()
{
scanf("%d\n",&N);
Mon[0]=0;
for (int i=1;i<=N;i++)
{
scanf("%d\n",&Mon[i]);
Mat[i][0]=0;
tmp[i]=true;
}
int a,b;
for(int i=1;i<=N-1;i++)
{
scanf("%d %d\n",&a,&b);
Mat[a][0]++;
Mat[a][ Mat[a][0] ]=b;
Mat[b][0]++;
Mat[b][ Mat[b][0] ]=a;
}
Mat[0][0]=0;
}
void dfs(int now,int mon)
{
tmp[now]=false;
if(mon>MAX)
MAX=mon;
for (int i=1;i<=N;i++)
{
bool flag=true;
for (int k=1;k<=N;k++)
{
if(tmp[k])
continue;
for (int j=1;j<=Mat[k][0];j++)
{
if(Mat[k][j]==i || !tmp[i])
{
flag=false;
break;
}
}
if(!flag)
break;
}
if(flag)
{
dfs(i,mon+Mon[i]);
}
}
tmp[now]=true;
}
int main()
{
freopen("profitz.in","r",stdin);
freopen("profitz.out","w",stdout);
init();
dfs(0,0);
cout<<MAX<<endl;
return 0;
}