神乎其技
非常美丽的一道题,奇诡且简洁。
我们考虑给每个想法都赋上一个权值,然后通过简单 dp 计算出每个题目所能包含到的想法的权值的最小值(也称作这个题目的权值)。如此一来,我们发现,假设一个题目包含的想法总数是
代码巨大好写。
#include <bits/stdc++.h>
#define int long long
using namespace std;
using namespace views;
constexpr int T = 150;
signed main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<tuple<int, int, int, int>> es(n);
for (auto& [w, u, v, s] : es | drop(m)) cin >> u >> v, --u, --v, s = 0;
default_random_engine rnd(random_device{}());
for (int t = T; t; --t) {
for (auto& [w, u, v, s] : es | take(m)) w = rnd();
for (auto& [w, u, v, s] : es | drop(m))
s += w = min(get<0>(es[u]), get<0>(es[v]));
}
for (auto& [w, u, v, s] : es | drop(m))
cout << fixed << setprecision(0) << rnd.max() * T * 1. / s - 1 << '\n';
return cout << flush, 0;
}