我太弱了,连暴力都写不对。
#include <bits/stdc++.h>
#define il inline
using namespace std;
typedef long long ll;
il ll read(){
ll x=0,c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-48,c=getchar();
return x;
}
void write(ll x){
if(x>9) write(x/10);
putchar(x%10+48);
}
il ll cmax(ll x,ll y){return x>y?x:y;}
const int N=2505,inf=1e9,T=2e8;
int n,m,k,dis[N][N],cnt;
ll s[N],ans;
struct node{
int p,val;
node(){p=val=0;}
node(int a,int b){p=a,val=b;}
bool operator<(const node &a) const {
if(val==a.val) return p<a.p;
return val>a.val;
}
};
vector<int> e[N];
il void add(int x,int y){e[x].push_back(y);}
priority_queue<node> q;
int x,y,z,d;
il void dij(int s){
while(q.size()) q.pop();
for(int i=1;i<=n;++i) dis[s][i]=inf;
q.push(node(s,0));dis[s][s]=0;
while(q.size()){
node cur=q.top();q.pop();
x=cur.p,d=cur.val;
if(dis[s][x]!=d) continue;
for(int i=0;i<e[x].size();++i){
y=e[x][i];
if(dis[s][y]>d+1){
dis[s][y]=d+1;
q.push(node(y,dis[s][y]));
}
}
}
}
int main() {
freopen("holiday.in","r",stdin);
freopen("holiday.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=2;i<=n;++i) scanf("%lld",&s[i]);
for(int i=1;i<=m;++i){
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
for(int i=1;i<=n;++i) dij(i);
if(n<=300){
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
for(int p=j+1;p<=n;++p){
for(int q=p+1;q<=n;++q){
if(dis[1][i]<=k+1 && dis[i][j]<=k+1 && dis[j][p]<=k+1 && dis[p][q]<=k+1 && dis[q][1]<=k+1)
ans=cmax(ans,s[i]+s[j]+s[p]+s[q]);
}
}
}
}
printf("%lld",ans);
return 0;
}
if(k==0){
for(int i=0;i<e[1].size();++i){
x=e[1][i];
for(int j=0;j<e[x].size();++j){
y=e[x][j];
for(int p=0;p<e[y].size();++p){
z=e[y][p];
for(int q=0;q<e[z].size();++q){
d=e[z][q];
if(dis[1][d]==1) ans=cmax(ans,s[x]+s[y]+s[z]+s[d]);
}
}
}
}
printf("%lld",ans);
return 0;
}
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
for(int p=j+1;p<=n;++p){
for(int q=p+1;q<=n;++q){
if(dis[1][i]<=k+1 && dis[i][j]<=k+1 && dis[j][p]<=k+1 && dis[p][q]<=k+1 && dis[q][1]<=k+1)
ans=cmax(ans,s[i]+s[j]+s[p]+s[q]);
++cnt;
if(cnt>T) break;
}
}
}
}
printf("%lld",ans);
return 0;
}
洛谷上50,但infoj上只有20。CCF 的数据会很水吗?