社区讨论
为什么数组开大一点才能AC呢
P5651基础最短路练习题参与者 5已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1vla0
- 此快照首次捕获于
- 2025/11/03 19:22 4 个月前
- 此快照最后确认于
- 2025/11/03 19:22 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MAXN 500005
int n, m, tot, qus;
int nxt[MAXN], val[MAXN];
int to[MAXN], hd[MAXN];
int cnt, dis[MAXN];
bool vis[MAXN];
void add (int u, int v, int w) {
++ cnt;
to[cnt] = v;
val[cnt] = w;
nxt[cnt] = hd[u];
hd[u] = cnt;
}
struct node {
int v; int w;
friend bool operator < (node a, node b) {
return a.w > b.w;
}
}tmp;
void init() {
memset(dis, 0x7f7f7f7f, sizeof dis);
memset(vis, 0, sizeof vis);
}
priority_queue<node> q;
void Dij() {
init();
dis[1] = 0;
tmp.v = 1; tmp.w = 0;
q.push(tmp);
while (q.size()) {
node tmp2 = q.top(); q.pop();
int x = tmp2.v;
if (vis[x]) continue;
vis[x] = 1;
for (int i = hd[x]; i; i = nxt[i]) {
int v = to[i], w = val[i];
if (dis[v] > dis[x] ^ w || tot == m) {
dis[v] = dis[x] ^ w;
tmp.v = v; tmp.w = dis[v];
q.push(tmp);
}
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m >> qus;
for (int i = 1, u, v, w; i <= m; i ++) {
cin >> u >> v >> w;
add(u, v, w);
add(v, u, w);
if (w <= 1) tot ++;
}
Dij();
for (int i = 1; i <= qus; i ++) {
int x, y; cin >> x >> y;
cout << (dis[x] ^ dis[y]) << '\n';
}
return 0;
}
真的不懂了啊 原来的MAXN是100005 可得40pts
改成500005就AC了 玄学!!!
(如果在CSP中遇到这种问题 我这个七年级的入怎么办啊)
回复
共 4 条回复,欢迎继续交流。
正在加载回复...