QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#274476#6679. Not Another Path Query ProblemliangqianxingCompile Error//C++231.6kb2023-12-03 15:55:282023-12-03 15:55:29

Judging History

This is the latest submission verdict.

  • [2023-12-03 15:55:29]
  • Judged
  • [2023-12-03 15:55:28]
  • Submitted

answer

#include <bitsdc++.h>
#define MAXN ((int) 1e5)
#define MAXQ ((int) 5e5)
using namespace std;

int n, m, q, qry[MAXQ + 10][2];
long long V;
bool ans[MAXQ + 10];

vector<int> e[MAXN + 10];
vector<long long> v[MAXN + 10];
int bel[MAXN + 10];

// 求包含 S 的连通块,要求所选边权包含 t 里所有的 1
void bfs(int S, long long t) {
    queue<int> q;
    q.push(S); bel[S] = S;
    while (!q.empty()) {
        int sn = q.front(); q.pop();
        for (int i = 0; i < e[sn].size(); i++) {
            int fn = e[sn][i];
            long long val = v[sn][i];
            if (bel[fn] || (val & t) != t) continue;
            q.push(fn); bel[fn] = S;
        }
    }
}

// 对于前缀 t 检查哪些点是连通的
void gao(long long t) {
    memset(bel, 0, sizeof(int) * (n + 3));
    // 通过 bfs 检查两个点是否位于同一连通块
    for (int i = 1; i <= n; i++) if (!bel[i]) bfs(i, t);
    for (int i = 1; i <= q; i++) ans[i] = ans[i] || bel[qry[i][0]] == bel[qry[i][1]];
}

int main() {
    scanf("%d%d%d%lld", &n, &m, &q, &V);
    for (int i = 1; i <= m; i++) {
        int x, y;
        long long z;
        scanf("%d%d%lld", &x, &y, &z);
        e[x].push_back(y); v[x].push_back(z);
        e[y].push_back(x); v[y].push_back(z);
    }
    for (int i = 1; i <= q; i++) scanf("%d%d", &qry[i][0], &qry[i][1]);

    if (V == 0) gao(0);
    // 通过每次 += lowbit,枚举值域范围内所有不同的前缀
    else for (long long t = V; t < (1LL << 60); t += t & (-t)) gao(t);
    for (int i = 1; i <= q; i++)
        if (ans[i]) printf("Yes\n");
        else printf("No\n");
    return 0;
}

详细

answer.code:1:10: fatal error: bitsdc++.h: No such file or directory
    1 | #include <bitsdc++.h>
      |          ^~~~~~~~~~~~
compilation terminated.