比赛 |
20120704 |
评测结果 |
AAAAAAATTTT |
题目名称 |
子集 |
最终得分 |
63 |
用户昵称 |
Czb。 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-07-04 10:36:09 |
显示代码纯文本
#include<stdio.h>
#include<vector>
#define max(a,b) a>b?a:b
using namespace std;
int n,m,tmp,ans,a[10001],flag[10001];
vector <int> v[10001];
void dfs(int k)
{
if(k==n)
{
ans=max(ans,tmp);
return;
}
for(int i=1;i<=n;i++)
{
if(!flag[i])
{
flag[i]++;k++;tmp+=a[i];
for(int j=0;j<v[i].size();j++)
{
if(!flag[v[i][j]])
{
k++;
}
flag[v[i][j]]++;
}
dfs(k);
for(int j=0;j<v[i].size();j++)
{
if(flag[v[i][j]]==1)
{
k--;
}
flag[v[i][j]]--;
}
flag[i]--;k--;tmp-=a[i];
}
}
}
int main()
{
freopen("subseta.in","r",stdin);
freopen("subseta.out","w",stdout);
int i,j,x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
dfs(0);
printf("%d\n",ans);
return 0;
}