QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#274476 | #6679. Not Another Path Query Problem | liangqianxing | Compile Error | / | / | C++23 | 1.6kb | 2023-12-03 15:55:28 | 2023-12-03 15:55:29 |
Judging History
This is the latest submission verdict.
- [2023-12-03 15:55:29]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [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;
}
Details
answer.code:1:10: fatal error: bitsdc++.h: No such file or directory 1 | #include <bitsdc++.h> | ^~~~~~~~~~~~ compilation terminated.