提交时间:2025-10-03 13:30:49
运行 ID: 38308
#include<bits/stdc++.h> using namespace std; long long n,m,q,s,op,lsa,mod; struct edge{long long v,w;}; vector<edge> g[500005]; vector<edge> t[500005]; long long c[500005]; long long ans[500005]; long long na[500005]; long long cnt[605];vector<long long>pos[605]; struct dot{ long long u,w; }; bool operator < (dot x,dot y){return x.w>y.w;} bool operator > (dot x,dot y){return x.w<y.w;} priority_queue<dot> pq; void diji(int s){ pq.push({s,0}); while(!pq.empty()){ long long u=pq.top().u,w=pq.top().w; //printf("%d %d\n",u,w); pq.pop(); if(ans[u]!=-1)continue; ans[u]=/*min(*/w/*,ans[c[u]])*/; for(auto v:g[u]){ if(ans[v.v]!=-1)continue; if(v.v==u)continue; pq.push({v.v,max(v.w,w)}); } } } int main(){ //freopen("travel.in","r",stdin); // freopen("travel.out","w",stdout); scanf("%d%d%d%d%d",&n,&m,&q,&s,&op); if(op==1) scanf("%lld",&mod); long long mxci=0; for(int i = 1;i<=n;i++){scanf("%d",&c[i]);mxci=max(mxci,c[i]);cnt[c[i]]++;pos[c[i]].push_back(i);} while(m--){ int u,v,w; scanf("%d%d%d",&u,&v,&w); g[u].push_back({v,w}); g[v].push_back({u,w}); } /*for(int i = 1;i<=mxci;i++){ for(auto j:g[i]){ printf("%d %d %d\n",i,j.v,j.w); } }*/ memset(ans,-1,sizeof ans); diji(s); for(int i = 1;i<=n;i++){ na[c[i]]=1e9; } for(int i = 1;i<=n;i++){ na[c[i]]=min(ans[i],na[c[i]]); } /*for(int i = 1;i<=n;i++){ printf("%d ",na[i]); }*/ while(q--){ long long l,r; scanf("%lld%lld",&l,&r); if(op==1){ l^=lsa,r^=lsa; l%=(mod),r%=(mod); l++,r++; } if(l>r)swap(l,r); long long cnt =0; for(int i = 1;i<=mxci;i++){ //if(i==s)continue; if(na[i]<=r&&na[i]>=l)cnt +=r-na[i]+1; if(na[i]<l)cnt+=r-l+1; } printf("%lld\n",cnt/*-mxci+l-1*/); lsa=cnt/*-mxci+l-1*/; } }