总是写挂,但是又不知道哪里错了,求助股民
#include<bits/stdc++.h>
namespace IO {
inline int read() {
int ret = 0, f = 1;char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') f = -f;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
ret = (ret << 1) + (ret << 3) + (ch ^ 48);
ch = getchar();
}
return ret * f;
}
void write(int x) {
if (x < 0) putchar('-'), x = -x;
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
}
}
using namespace IO;
using namespace std;
const int maxn = 2e5 + 5;
const int maxm = 4e5 + 5;
const int maxp = 20 + 5;
struct Node {
int fr, to, valL, valH;
bool operator < (const Node & x) {
return x.valH > valH;
}
}Edge[maxm << 2];
int Edge_tot;
void addEdge(int u, int v, int l, int h) {
Edge_tot++;
Edge[Edge_tot].fr = u;
Edge[Edge_tot].to = v;
Edge[Edge_tot].valL = l;
Edge[Edge_tot].valH = h;
}
int n, m, Q, K, S, ans, T;
int tot, hd[maxn << 1], to[maxm << 1], nxt[maxn << 1], val[maxm << 2], PosvalL[maxn << 1], PosvalH[maxn << 1];
void add(int u, int v, int c) {
tot++;
nxt[tot] = hd[u];
hd[u] = tot;
to[tot] = v;
val[tot] = c;
}
int fa[maxn << 1];
struct Node1 {
int num, value;
bool operator < (const Node1 & x) {
return x.value > value;
}
};
priority_queue<Node1> q;
int dis[maxn << 1], vis[maxn << 1];
void dij() {
q.push({1, 0});
dis[1] = 0;
while (!q.empty()) {
Node1 now = q.top();q.pop();
int u = now.num;
if (vis[u]) continue;
vis[u] = 1;
for (int i = hd[u];i;i = nxt[i]) {
int v = to[i], Value = val[i];
if (dis[v] > dis[u] + Value) {
dis[v] = dis[u] + Value;
q.push({v, dis[u] + Value});
}
}
}
}
//int dep[maxn];
int fat[maxn][maxp], Minh[maxn << 1];
void dfs(int x, int father) {
Minh[x] = dis[x];
// dep[x] = dep[father] + 1;
fat[x][0] = father;
for (int i = 1;i < maxp;i++) fat[x][i] = fat[fat[x][i - 1]][i - 1];
for (int i = hd[i];i;i = nxt[i]) {
int v = to[i];
if (v == father) continue;
dfs(v, x);
Minh[x] = min(Minh[x], Minh[v]);
}
}
int Find(int x) {
return (fa[x] == x) ? x : fa[x] = Find(fa[x]);
}
void init() {
memset(Edge, 0, sizeof(Edge));
memset(PosvalL, 0, sizeof(PosvalL));
memset(PosvalH, 0, sizeof(PosvalH));
memset(vis, 0, sizeof(vis));
memset(dis, 0, sizeof(dis));
}
int main() {
T = read();
while (T--) {
init();
n = read(), m = read();
for (int i = 1;i <= m;i++) {
int U = read(), V = read(), L = read(), A = read();
addEdge(U, V, L, A), addEdge(V, U, L, A);
}
dij();
sort(Edge + 1, Edge + 1 + m * 2);
for (int i = 1;i <= m * 2;i++) fa[i] = i;
int k = n;
for (int i = 1;i <= m * 2;i++) {
int u = Edge[i].fr, v = Edge[i].to, l = Edge[i].valL, h = Edge[i].valH;
int ufa = Find(u), vfa = Find(v);
if (ufa == vfa) continue;
k++, fa[ufa] = k, fa[vfa] = k;
add(k, ufa, l), add(k, vfa, l);
// PosvalL[k] = l;
PosvalH[k] = h;
}
dfs(k, 0);
Q = read(), K = read(), S = read();
while (Q--) {
int v0 = read(), p0 = read();
int v = (v0 + K * ans - 1) % (n + 1), p = (p0 + K * ans) % (S + 1);
for (int i = maxp - 1;i >= 0;i--) if (fat[v][i] && PosvalH[fat[v][i]] > p) v = fat[v][i];
ans = Minh[v];
write(ans);puts("");
}
}
return 0;
}
上面两个operator有什么问题