哪位大神帮看看,暴力55分还能优化吗?
查看原帖
哪位大神帮看看,暴力55分还能优化吗?
452610
csy20070918楼主2022/10/30 10:04
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2510;
long long sc[MAXN];
vector<long long > g[MAXN];
int d[MAXN][MAXN];
int n,m,k;
long long top;
bool flagall;
bool flag[MAXN],flagc[MAXN];
void solve(int x,int tmp,int y){
	if (tmp > k+1) return;
	for (int i = 0;i < g[x].size();i++){
		d[y][g[x][i]] = tmp;
		d[g[x][i]][y] = tmp;
		solve(g[x][i],tmp+1,y);
	}
	return;
}
void pr(long long point,int pos,int dep,int from){
	if (flag[pos] == true && pos != 1){
		return;
	}else flag[pos] = true;
	point += sc[pos]; 
	if (dep == 5 && pos == 1){
		//cout << point << ' ';
		top = max(point,top);
		flag[pos] = false;
		return;
	}
	if (dep == 5){
		flag[pos] = false;
		return;
	}
	for (int i = 1;i <= n;i++){
		if (d[pos][i] && pos != i){
			//if (flag[i]) pr(point,i,dep);
			pr(point,i,dep+1,pos);
		}
	}
	flag[pos] = false;
	return;
}
int main(){
	freopen("holiday.in","r",stdin);
	freopen("holiday.out","w",stdout);
	cin >> n >> m >> k;
	for (int i = 2;i <= n;i++){
		cin >> sc[i];
	}
	for (int i = 0,x,y;i < m;i++){
		cin >> x >> y;
		g[x].push_back(y);
		g[y].push_back(x);
	}
	for (int i = 1;i <= n;i++){
		solve(i,1,i);
	}
	pr(0,1,0,1);
	cout << top << endl;
//	for (int i = 1;i <= n;i++){
//		for (int j = 1;j <= n;j++){
//			cout << d[i][j] << ' ';
//		}
//		cout << endl;
//	}
	return 0;
}
2022/10/30 10:04
加载中...