关于CCF数据强度
  • 板块灌水区
  • 楼主happybob
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/10/31 19:04
  • 上次更新2023/10/27 04:42:20
查看原帖
关于CCF数据强度
332914
happybob楼主2022/10/31 19:04

rt,ccf 数据强度和什么 oj 类似。

S 组 A 题 O(n4)O(n^4) 枚举赛时降智,从上一个枚举点编号 +1+1 开始然后没测大样例。

目前 luogu 60, inf 65, jsk 70, 小图灵 85,ccf 大约能拿多少。

k=0k=0 我特判就没写 n4n^4 的做法。

#include <bits/stdc++.h>
using namespace std;

const int N = 2505;

int n, m, k;
long long a[N];
vector<int> G[N];
bool v[N];
long long d[N][N];

long long ans = 0;

void dfs(int u, int cnt, long long sum)
{
	if (cnt == 5 && u == 1)
	{
		ans = max(ans, sum);
		return;
	}
	if (cnt == 5) return;
	v[u] = 1;
	for (int j = 0; j < G[u].size(); j++)
	{
		int np = G[u][j];
		if (!v[np] || np == 1)
		{
			dfs(np, cnt + 1, sum + a[np]);
			//printf("%lld %lld\n", u, np);
		}
	}
	v[u] = 0;
}

void bfs(int st)
{
	queue<int> q;
	q.push(st);
	d[st][st] = 0;
	while (q.size())
	{
		int u = q.front();
		q.pop();
		for (int i = 0; i < G[u].size(); i++)
		{
			int j = G[u][i];
			if (d[st][j] == -1)
			{
				d[st][j] = d[st][u] + 1;
				q.push(j);
			}
		}
	}
	for (int i = 1; i <= n; i++) d[st][i]--;
}

long long maxn[N], maxn2[N];

int main()
{
	//freopen("holiday.in", "r", stdin);
	//freopen("holiday.out", "w", stdout);
	memset(d, -1, sizeof d);
	scanf("%d%d%d", &n, &m, &k);
	for (int i = 2; i <= n; i++)
	{
		scanf("%lld", &a[i]);
	}
	for (int i = 1; i <= m; i++)
	{
		int u, v;
		scanf("%d%d", &u, &v);
		G[u].push_back(v);
		G[v].push_back(u);
	}
	if (k == 0)
	{
		dfs(1, 0, 0);
		printf("%lld\n", ans);
	}
	else
	{
		for (int i = 1; i <= n; i++) bfs(i);
		for (int i = 1; i <= n; i++)
		{
			if (i == 1 || d[1][i] > k) continue;
			for (int j = i + 1; j <= n; j++)
			{
				if (d[i][j] > k) continue;
				for (int kk = j + 1; kk <= n; kk++)
				{
					if (d[j][kk] > k) continue;
					for (int kkk = kk + 1; kkk <= n; kkk++)
					{
						if (d[kk][kkk] > k || d[kkk][1] > k) continue;
						ans = max(ans, a[i] + a[j] + a[kk] + a[kkk]);
					}
				}
			}
		}
		printf("%lld\n", ans);
	}
	return 0;
}
2022/10/31 19:04
加载中...