| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38389 | 黄子睿 | 【S】T2 | C++ | 运行出错 | 20 | 646 MS | 63076 KB | 1694 | 2025-10-03 18:42:45 |
#include<bits/stdc++.h> using namespace std; int n,m,q,s,opt; const int N=5e5+10; bool flagc[605]; long long minc[605]; long long c[N]; long long f[N]; long long vis[N]; long long M; long long lastans; struct wsw{ long long v,w; }; vector<wsw> Tree[N]; struct edge{ long long ui,vi,wi; }a[N]; bool cmp(edge x,edge y){ return x.wi<y.wi; } int find(long long x){ if(f[x]==x) return x; f[x]=find(f[x]); return f[x]; } void add(long long x,long long y){ f[find(x)]=y; } void dfs(long long x){ minc[c[x]]=min(minc[c[x]],vis[x]); for(int i=0;i<Tree[x].size();i++){ if(vis[Tree[x][i].v]==-1){ vis[Tree[x][i].v]=max(vis[x],(long long)Tree[x][i].w); dfs(Tree[x][i].v); } } return; } long long sum(long long x){ long long ans=0; for(int i=0;i<605;i++){ if(flagc[i]){ ans+=max((long long)0,(x-minc[i]+1)); } } return ans; } int main(){ for(long long i=0;i<605;i++){ minc[i]=1e9+5; } cin>>n>>m>>q>>s>>opt; if(opt==1) cin>>M; for(long long i=1;i<=n;i++){ cin>>c[i]; vis[i]=-1; flagc[c[i]]=1; f[i]=i; } for(long long i=1;i<=m;i++) cin>>a[i].ui>>a[i].vi>>a[i].wi; sort(a+1,a+m+1,cmp); int dis=1; for(long long i=1;i<m;i++){ while(find(a[dis].ui)==find(a[dis].vi)) dis++; add(a[dis].ui,a[dis].vi); Tree[a[dis].ui].push_back((wsw){a[dis].vi,a[dis].wi}); Tree[a[dis].vi].push_back((wsw){a[dis].ui,a[dis].wi}); } vis[s]=0; dfs(s); for(long long i=1;i<=q;i++){ long long li,ri; cin>>li>>ri; if(opt==1){ li=(li^lastans)%(M+1); ri=(li^lastans)%(M+1); } if(li>ri){ swap(li,ri); } lastans=sum(ri)-sum(li-1); cout<<lastans<<endl; } return 0; }