55分求调
查看原帖
55分求调
419823
Matsuki楼主2024/3/20 20:16
#include <bits/stdc++.h>
using namespace std;

int line_head[30001];
int line_tail[30001];

int find_head(int a){
	if(line_head[a]==a) return a;
	return find_head(line_head[a]);
}
int find_tail(int a){
	if(line_tail[a]==a) return a;
	return find_tail(line_tail[a]);
}

void _m(int i,int j){
	swap(line_head[find_head(i)],line_tail[find_tail(j)]);
	return;
}
int cnt(int step,int i,int j){
	if(i==j) return step;
	return cnt(step+1,line_head[i],j);
}
void _c(int i,int j){
	if(find_head(i)!=find_head(j)){
		cout<<"-1"<<endl;
		return;
	}
	cout<<abs(cnt(0,i,find_head(i))-cnt(0,j,find_head(j)))-1<<endl;
	return;
}

int main(){
	int p;
	cin>>p;
	for(int i=1;i<=30000;i++){
		line_head[i]=i;
		line_tail[i]=i;
	}
	for(int x=1;x<=p;x++){
		char type;
		int i,j;
		cin>>type>>i>>j;
		if(type=='M'){
			_m(i,j);
		}
		if(type=='C'){
			_c(i,j);
		}
	}
	return 0;
}

55分求调

2024/3/20 20:16
加载中...