为什么 SLF 优化会导致 WA
查看原帖
为什么 SLF 优化会导致 WA
414610
_thiscall楼主2021/11/11 07:58

RT,用小号交了亿遍,发现正常 SPFA 可过,但加上 SLF swap 优化就 WA 掉了

勉强可过的代码(再改就会 WA 掉)

deque<int> q;
inline void slf_swap() {
	if (q.size() && d[q.front()] > d[q.back()]) swap(q.front(), q.back());
}
inline void slf_insert(int v) {
	q.push_back(v);
//	if (q.size() && d[v] > d[q.front()]) q.push_back(v);
//	else q.push_front(v);
//	slf_swap();
}
int SPFA(int st) {
	memset(d, 0x3f, sizeof(d)); memset(cnt, 0, sizeof(cnt)); memset(inqueue, 0, sizeof(inqueue));
	q.clear(); q.push_back(st); d[st] = 0;
	while (q.size()) {
		const int u = q.front(); q.pop_front();
		slf_swap();
		inqueue[u] = 0;
		for (auto it : e[u]) {
			const int v = it.first, w = it.second;
			if (d[v] > d[u] + w) {
				d[v] = d[u] + w;
				if (!inqueue[v]) {
					inqueue[v] = 1;
					slf_insert(v);
					if (++cnt[v] >= n) return 1;
				}
			}
		}
	}
	return 0;
}
2021/11/11 07:58
加载中...