求条
查看原帖
求条
464712
ForgetOIDuck楼主2024/8/17 17:30
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, k, p[5002], c[5002], ans = -0x3f3f3f3f3f3f3f3f;
int main() {
	cin >> n >> k;
	for (ll i = 1; i <= n; i ++ ) cin >> p[i];
	for (ll i = 1; i <= n; i ++ ) cin >> c[i];
	for (ll i = 1; i <= n; i ++ ) {
		ll r = 1, t = p[i], s = 0, maxn = -0x3f3f3f3f3f3f3f3f;
		for (ll j = 1; j <= k && t != i; t = p[t], r ++, j ++ ) s += c[t], maxn = max(maxn, s);
		s += c[i];
		ll cnt = (k - 1) / r, ss = max(s, 0ll) * cnt;
		ll lst = k - cnt * r;
		maxn = ((cnt == 0 || ss < 0) ? -0x3f3f3f3f3f3f3f3f : 0);
		s = 0;
		t = p[i];
		for (ll j = 1; j <= lst; t = p[t], j ++ ) s += c[t], maxn = max(maxn, s);
		ans = max(ans, ss + maxn);
	}
	cout << ans;
}

WA on #26, #28, #36, #37

2024/8/17 17:30
加载中...