记录编号 235952 评测结果 RRRRRRRRRR
题目名称 [焦作一中2012] 玻璃球游戏 最终得分 0
用户昵称 GravatarHzoi_Yniverse 是否通过 未通过
代码语言 C++ 运行时间 0.001 s
提交时间 2016-03-12 09:16:45 内存使用 6.04 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=300001;
struct Node{
	int order,num;
}a[maxn];
int Findroot(int);
int n,q,root[maxn],len,old[maxn],huan,ans[maxn],cnt=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x;cin>>x;
		root[i]=x;
	}
	cin>>q;
	for(int i=1;i<=q;i++){
		len++;
		cin>>a[i].order>>a[i].num;
		if(a[i].order==2) {
			old[a[i].num]=root[a[i].num];
			root[a[i].num]=a[i].num;
		}
	}
	for(int i=len;i>0;i--){
		int x=a[i].order;
		int y=a[i].num;
		if(huan==1){
			ans[++cnt]=0;
			continue;
		}
		if(x==1){
			int rx=Findroot(y);
			ans[++cnt]=rx;
		}
		else{
			int rx=Findroot(y);
			int ry=Findroot(old[y]);
			if(rx==ry) huan=1;
			else root[rx]=ry;
		}
	}
	for(int i=cnt;i>0;i--){
		if(ans[i]==0){
			cout<<"CIKLUS"<<endl;
			continue;
		}
		cout<<ans[i]<<endl;
	}
	return 0;
} 
int Findroot(int x){
	if(x!=root[x]){
		root[x]=Findroot(root[x]);
	}
	return root[x];
}