求s组t1四重循环暴力大样例过了爆零原因
  • 板块灌水区
  • 楼主LSY_AK_IOI
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/10/29 21:49
  • 上次更新2023/10/27 05:02:27
查看原帖
求s组t1四重循环暴力大样例过了爆零原因
347719
LSY_AK_IOI楼主2022/10/29 21:49
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,f[2510][2510],v[2510],vv[2510],q,mx,sum;
vector<int>a[2510];
void bfs(int x){
	memset(vv,0,sizeof(vv));
	vv[x]=1;
	queue<int>q1,q2;
	q1.push(x),q2.push(0);
	while (q1.size()){
		int xx=q1.front(),yy=q2.front();
		q1.pop();q2.pop();
		for (int i=0;i<a[xx].size();i++){
			if (vv[a[xx][i]]==0){
				q1.push(a[xx][i]);
				q2.push(yy+1);
				f[q][a[xx][i]]=yy;
				vv[a[xx][i]]=1;
			}
		}
	}
}
int main(){
	freopen("holiday.in","r",stdin);
	freopen("holiday.out","w",stdout);
	scanf("%d%d%d",&n,&m,&k);
	memset(f,0x3f3f3f3f,sizeof(f));
	for (int i=2;i<=n;i++) scanf("%d",&v[i]);
	for (int i=1;i<=m;i++){
		long long x,y;
		scanf("%d%d",&x,&y);
		a[x].push_back(y);
		a[y].push_back(x);
		f[x][y]=f[y][x]=0;
	}
	for (int i=1;i<=n;i++){
		q=i;
		bfs(i);
	}

	for (int i=2;i<=n;i++){
		if (f[1][i]>k) continue;
		sum+=v[i];
		for (int j=2;j<=n;j++){
			if (f[i][j]>k||i==j) continue;
			sum+=v[j];
			for (int l=2;l<=n;l++){
				if (f[j][l]>k||i==l||j==l) continue;
				sum+=v[l];
				for (int r=2;r<=n;r++){
					if (f[l][r]>k||f[1][r]>k||i==r||j==r||l==r) continue;
					if (sum+v[r]>mx) mx=sum+v[r];
				}
				sum-=v[l];
			}
			sum-=v[j];
		}
		sum-=v[i];
	}
	cout<<mx;
 	return 0;
}
2022/10/29 21:49
加载中...