记录编号 |
606846 |
评测结果 |
AAAAATTTTTTTTTTTTTTTTTTTT |
题目名称 |
4116.[统一省选 2025]追忆 |
最终得分 |
20 |
用户昵称 |
梦那边的美好ME |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
181.105 s |
提交时间 |
2025-10-04 15:09:37 |
内存使用 |
821.93 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll head[410000],cnt;
ll c,T;
ll n,m,q;
ll a[110000],b[110000],p[110000];
bitset <110000> t[110000],aaaaa;
vector <int> vg[110000];
int main(){
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
freopen("recall.in","r",stdin);
freopen("recall.out","w",stdout);
scanf("%lld %lld",&c,&T);
while(T--){
scanf("%lld %lld %lld",&n,&m,&q);
for (int i=1;i<=m;i++){
ll u,v;
scanf("%lld %lld",&u,&v);
vg[u].push_back(v);
}
for (int i=n;i>=1;i--){
t[i][i]=1;
for (int u:vg[i]){
t[i]|=t[u];
}
}
for (int i=1;i<=n;i++){
scanf("%lld",&a[i]);
p[a[i]]=i;
}
for (int i=1;i<=n;i++){
scanf("%lld",&b[i]);
}
for (int i=1;i<=q;i++){
ll o,x,y,l,r;
scanf("%lld",&o);
if (o==1){
scanf("%lld %lld",&x,&y);
swap(p[a[x]],p[a[y]]);
swap(a[x],a[y]);
}else if (o==2){
scanf("%lld %lld",&x,&y);
swap(b[x],b[y]);
}else{
ll maxn=0;
scanf("%lld %lld %lld",&x,&l,&r);
for (int i=l;i<=r;i++){
if (t[x][p[i]]){
maxn=max(maxn,b[p[i]]);
if (maxn==n) break;
}
}
printf("%lld\n",maxn);
}
}
for (int i=1;i<=n;i++){
vg[i].clear();
t[i]=aaaaa;
}
}
return 0;
}