比赛 国庆欢乐赛2 评测结果 AAAAATTTTTTTTTTTTTTTTTTTT
题目名称 追忆 最终得分 20
用户昵称 梦那边的美好WA 运行时间 180.771 s
代码语言 C++ 内存使用 5.37 MiB
提交时间 2025-10-04 10:57:15
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m,q;
const int N=1e5+5,M=2e5+5;
int head[N],nxt[M],to[M],num=0;
void add(int u,int v) {
	num++;
	to[num]=v;
	nxt[num]=head[u];
	head[u]=num;
}
int a[N],b[N];
bool vis[N];
void dfs(int x) {
	for(int i=head[x]; i; i=nxt[i]) {
		if(!vis[to[i]]) {
			vis[to[i]]=1;
			dfs(to[i]);
		}
	}
}
int main() {
    freopen("recall.in","r",stdin);
    freopen("recall.out","w",stdout);
	int c,t;
	cin>>c>>t;
	while(t--) {
		cin>>n>>m>>q;
		memset(head,0,sizeof(head));
		num=0;
		for(int i=1; i<=m; i++) {
			int u,v;
			cin>>u>>v;
			add(u,v);
		}
		for(int i=1; i<=n; i++) {
			cin>>a[i];
		}
		for(int i=1; i<=n; i++) {
			cin>>b[i];
		}
		while(q--) {
			int op,x,y,l,r;
			cin>>op;
			if(op==1) {
				cin>>x>>y;
				swap(a[x],a[y]);
			} else if(op==2) {
				cin>>x>>y;
				swap(b[x],b[y]);
			} else {
				cin>>x>>l>>r;
				memset(vis,0,sizeof(vis));
				vis[x]=1;
				dfs(x);
				int ans=0;
				for(int i=1; i<=n; i++) {
					if(l<=a[i]&&a[i]<=r&&vis[i]) {
						ans=max(ans,b[i]);
					}
				}
				cout<<ans<<endl;
			}
		}
	}
	return 0;
}