RE代码,求调
#include<bits/stdc++.h>
#define fq(i,d,u) for(int i(d); i<=u; ++i)
#define fr(i,u,d) for(int i(u); i>=d; --i)
#define sf scanf
#define pf printf
using namespace std;
const int N = 2e5,M = 4e5,inf = 2e9 + 5;
int n,m;
struct E{int u,v,l,w;} e[M];
typedef pair<int,int> pii;
vector<pii> mp[M];
int dis[M]; bool vis[M];
namespace B {
int fa[M << 1];
void init () {fq(i,1,n * 2 - 1) fa[i] = i;}
int find(int x) {return fa[x] == x ? x : fa[x] = find(fa[x]);}
}
namespace R {
int cnt;
int val[M << 1],w[M << 1]; //height,distance
struct nd {int l,r;} tr[M << 1];
int fa[M << 1][21];
void dfs(int x,int f) {
if(!x) return;
fa[x][0] = f;
dfs(tr[x].l,x);
dfs(tr[x].r,x);
w[x] = min({w[x],w[tr[x].l],w[tr[x].r]});
}
void work() {
B::init();
sort(e + 1,e + 1 + m,[](E a,E b) {return a.w > b.w;});
cnt = n;
fq(i,1,m) {
auto [u,v,l,w] = e[i];
u = B::find(u),v = B::find(v);
if(u == v) continue;
tr[++cnt].l = u,tr[cnt].r = v;
val[cnt] = w;
B::fa[u] = B::fa[v] = cnt;
}
fq(i,n + 1,cnt) w[i] = inf;
fq(i,1,n) w[i] = dis[i];
// cerr << cnt << "#\n";
dfs(cnt,cnt);
fq(k,1,20) fq(i,1,cnt) fa[i][k] = fa[fa[i][k - 1]][k - 1];
int q,K,S,lastans(0); cin >> q >> K >> S;
while(q--) {
int v,p; cin >> v >> p;
v = (v + K * lastans - 1) % n + 1;
p = (p + K * lastans) % (S + 1);
fr(k,20,0) if(val[fa[v][k]] > p) v = fa[v][k];
// cout << v << " " << p << "#\n";
cout << (lastans = w[v]) << "\n";
}
fq(i,1,cnt) tr[i].l = tr[i].r = 0,val[i] = 0;
fq(k,0,20) fq(i,1,cnt) fa[i][k] = 0;
}
}
void solve() {
cin >> n >> m;
fq(i,1,n) mp[i].clear();
fq(i,1,m) {
auto &[u,v,l,w] = e[i];
cin >> u >> v >> l >> w;
mp[u].push_back({v,l});
mp[v].push_back({u,l});
}
fq(i,1,n) dis[i] = inf,vis[i] = 0;
priority_queue<pii,vector<pii>,greater<pii>> q;
q.push({0,1}); dis[1] = 0;
while(q.size()) {
auto [s,u] = q.top(); q.pop();
if(vis[u]) {continue;} vis[u] = 1;
for(auto [v,w] : mp[u]) {
if(dis[v] > s + w) {
dis[v] = s + w;
q.push({s + w,v});
}
}
}
// fq(i,1,n) cout << dis[i] << " ";
// cout << "#\n";
R::work();
}
int main(){
// freopen("return.in","r",stdin);
// freopen("return.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
R::w[0] = inf;
int T; cin >> T;
while(T--) solve();
return 0;
}