前向星模拟Vector
很多时候,我们需要使用 vector 可变长数组的性质,绝大多数情况下都没有问题。但在数据特别大,且不一定是正解的时候,使用 vector 性能过慢,有可能造成多数测试点超时。此时,可以考虑如下方法
#include <iostream>
#include <functional>
using namespace std;
const int N = 2e5 + 7;
int deg[N], a[N], ans[N];
struct Adj {
struct { int v, nx; } e[N<<1];
int c = 0, hd[N];
void push(int u, int v) { e[++c] = {v, hd[u]}, hd[u] = c; }
void walk(int u, function<void(int)> f) {
for (int i = hd[u]; i; i = e[i].nx) f(e[i].v);
}
} vc;
int main() {
...
// 注意需要将用到的 main 函数中的参数填入捕获列表中,使用 & 按引用访问所有动态变量
vc.walk(x, [&](int v) { mx = max(mx, a[v]); });
...
}

浙公网安备 33010602011771号