前向星模拟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]); });
  ...
}
posted @ 2024-09-02 14:07  飞花阁  阅读(28)  评论(0)    收藏  举报
//雪花飘落效果