问题描述
#include "../data-structures/RMQ.h"
struct LCA {
int T = 0;
vi time,path,ret;
RMQ<int> rmq;
LCA(vector<vi>& C) : time(sz(C)),rmq((dfs(C,-1),ret)) {}
void dfs(vector<vi>& C,int v,int par) {
// ...
}
// ...
};
在这行 rmq((dfs(C,ret))
中,我不明白 (dfs(C,ret)
如何形成 RMQ 构造函数的有效输入参数(即 vector<int>
)。周围的括号有什么作用?dfs()
和 ret
是如何使用的?
解决方法
这是一段棘手的代码。作者使用可怕的 comma operator 首先调用 dfs(...)
,然后用 rmq
的值初始化 ret
向量。
简而言之,(dfs(C,-1),ret)
首先调用 dfs
,丢弃其结果,然后计算为 ret
。
如果可以避免,请不要编写这样的代码,这会令人困惑。