比赛 |
CSP2022提高组 |
评测结果 |
AAAWWWWWAAAWWWEEEEEE |
题目名称 |
假期计划 |
最终得分 |
30 |
用户昵称 |
康尚诚 |
运行时间 |
1.362 s |
代码语言 |
C++ |
内存使用 |
2.34 MiB |
提交时间 |
2022-10-30 11:57:10 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=2510,M=10010;
struct node
{
int to;int pre;
}edge[M];
int lst[N],cnt=0;
void addedge(int from,int to)
{
cnt++;
edge[cnt].to=to;
edge[cnt].pre=lst[from];
lst[from]=cnt;
}
ull v[N],maxv=0;
bool vis[N];
void dfs(ull val,int num,int now)//当前总价值,已经走的点数和当前位于的点
{
// cout<<num<<' '<<now<<endl;
if(num==5)
{
if(now==1)
maxv=max(maxv,val);
return;
}
if(num!=0&&now==1) return;
for(int i=lst[now];i!=0;i=edge[i].pre)
{
int u=edge[i].to;
if(!vis[u])
{
vis[u]=1;
dfs(val+v[u],num+1,u);
vis[u]=0;
}
}
return;
}
int main()
{
freopen("csp2022_holiday.in","r",stdin);
freopen("csp2022_holiday.out","w",stdout);
int n,m,k;cin>>n>>m>>k;
for(int i=2;i<=n;i++)
{
cin>>v[i];
}
int u,v;
for(int i=1;i<=m;i++)
{
cin>>u>>v;
addedge(u,v);
addedge(v,u);
}
dfs(0,0,1);
cout<<maxv;
}