85分求调
查看原帖
85分求调
1168486
DomiSun楼主2025/6/19 22:37
#include <bits/stdc++.h>
using namespace std;
#define N 300010
int n,m;
int s[N],l[N];
stack < pair<int,int> > t;
int find(int x) {return x == s[x] ? x : s[x] = find(s[x]);}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i++) s[i] = i,l[i] = 1;
	while(m--){
		int opt,x,y;
		cin >> opt;
		if(opt == 1){
			cin >> x >> y;
			int dx = find(x),dy = find(y);
			if(l[dx] > l[dy]) swap(dx,dy);
			s[dx] = dy;
			t.push({dx,dy});
			l[dy] = max(l[dy],l[dx]+1);
		}else if(opt == 2){
			if(!t.empty()){
				auto [dx,dy] = t.top();
				t.pop();
				s[dx] = dx;
				s[dy] = dy;
			}
		}else{
			cin >> x >> y;
			cout << (find(x) == find(y) ? "Yes\n" : "No\n");
		}
	}
	return 0;
}
2025/6/19 22:37
加载中...