提交时间:2025-10-03 13:32:00
运行 ID: 38309
#include<bits/stdc++.h> using namespace std; long long n,m,_,s,op,md,nmax,a[500005],vis[500005],mc[500005]; struct sss{ long long v,w; }; vector<sss>poi[500005]; struct ss{ long long now,v; bool operator<(const ss x)const{ return x.v<v; } }; priority_queue<ss>q; int main(){ scanf("%lld%lld%lld%lld%lld",&n,&m,&_,&s,&op); if(op==1){ scanf("%lld",&md); } for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); nmax=max(nmax,a[i]); } for(int i=1;i<=m;i++){ long long a,b,c; scanf("%lld%lld%lld",&a,&b,&c); poi[a].push_back((sss){b,c}); poi[b].push_back((sss){a,c}); } memset(vis,0x3f,sizeof(vis)); q.push((ss){s,0}); while(!q.empty()){ ss now=q.top(); q.pop(); if(vis[now.now]<now.v)continue; vis[now.now]=now.v; for(int i=0;i<poi[now.now].size();i++){ if(vis[poi[now.now][i].v]>max(now.v,poi[now.now][i].w)){ vis[poi[now.now][i].v]=max(now.v,poi[now.now][i].w); q.push((ss){poi[now.now][i].v,vis[poi[now.now][i].v]}); } } } memset(mc,0x3f,sizeof(mc)); for(int i=1;i<=n;i++){ mc[a[i]]=min(mc[a[i]],vis[i]); } long long last=0; while(_--){ long long l,r; scanf("%lld%lld",&l,&r); if(op==1){ l=((l^last)); r=((r^last)); l%=md; r%=md; l++,r++; if(l>r)swap(l,r); } long long ans=0; for(int i=1;i<=nmax;i++){ ans=ans+max(0ll,r-max(l,mc[i])+1); } printf("%lld\n",ans); last=ans; } }