n 個年份節點,m 條時光穿梭路徑 (x→y, x≥y)。q 次詢問:在第 p 年時,有多少年份可通過至少兩條不同路徑到達?
multisetS; sort(edges, edges+m, [](a,b){return a.u < b.u;}); sort(queries, queries+q, [](a,b){return a.d < b.d;}); int pos = m-1; for (int i = q-1; i >= 0; i--) { int day = queries[i].d; while (pos >= 0 && edges[pos].u >= day) { S.insert(edges[pos].v); pos--; } int cnt = 0, vals[2]; for (auto it = S.begin(); it != S.end() && cnt < 2; ++it) { vals[cnt++] = *it; } ans[queries[i].id] = (cnt >= 2 && vals[1] <= day) ? day - vals[1] : 0; }
輸入: 9 3 3 9 1 6 1 4 1 6 7 2 輸出: 5 0 1 解釋:年份 6 可通過 6→1 和 6→7→8→9→1 兩條路徑到達 1、2
O((m+q) log m),multiset 操作 log 級,適合 50000 規模。