比赛 国庆欢乐赛2 评测结果 AAAAATTTTTTTTTTTTTTTTTEEE
题目名称 追忆 最终得分 20
用户昵称 郑霁桓 运行时间 154.398 s
代码语言 C++ 内存使用 467.11 MiB
提交时间 2025-10-04 12:06:07
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int c,T,n,m,q,x,y,a[80005],b[80005],op,l,r,tt,as,p[80005],ff,fa;
vector<int>v[80005],t[80005]; 
inline void dfs(int xx){
    if(p[xx]==tt) return;
    t[tt].push_back(xx),p[xx]=tt,ff=fa;
    for(register int i=0;i<v[xx].size();++i) if(v[xx][i]!=ff)  fa=xx,dfs(v[xx][i]);
    fa=ff;
    return;
}
inline int read(){
    int xx=0;
    char ch=getchar();
    while(ch<'0'||'9'<ch) ch=getchar();
    while('0'<=ch&&ch<='9') xx=(xx<<1)+(xx<<3)+(ch-'0'),ch=getchar();
    return xx;
}
int main(){
    freopen("recall.in","r",stdin);
    freopen("recall.out","w",stdout);
    c=read(),T=read();
    while(T--){
        n=read(),m=read(),q=read(),tt=as=0;
        for(register int i=1;i<=n;++i) v[i].clear(),t[i].clear(),p[i]=0;
        for(register int i=1;i<=m;++i) x=read(),y=read(),v[x].push_back(y);
        for(register int i=1;i<=n;++i) tt=i,ff=fa=0,dfs(i);
        for(register int i=1;i<=n;++i) a[i]=read();
        for(register int i=1;i<=n;++i) b[i]=read();
        while(q--){
            op=read(),x=read();
            if(op==1) y=read(),swap(a[x],a[y]);
            else if(op==2) y=read(),swap(b[x],b[y]);
            else if(op==3){
                l=read(),r=read(),as=0;
                for(register int i=0;i<t[x].size();++i)
                    if(l<=a[t[x][i]]&&a[t[x][i]]<=r) as=max(as,b[t[x][i]]);
                printf("%lld",as),puts("");
            }
        }
    }
    return 0;
}