玄关求助!!!
查看原帖
玄关求助!!!
808304
ZhengYuZhe_13楼主2025/7/27 21:46
#include<iostream>
#include<vector>
using namespace std;
class DSU{
private:
	vector<int> parent;
	vector<int> rank;
public:
	DSU(int n){
		parent.resize(n+1);
		rank.resize(n+1,0);
		for(int i=1;i<=n;i++){
			parent[i]=i;
		}
	}
	int find(int x){
		if(parent[x]!=x){
			parent[x]=find(parent[x]);
		}
		return parent[x];
	}
	void unionSets(int x,int y){
		int rootX=find(x);
		int rootY=find(y);
		if(rootX==rootY){
			return;
		}
		if(rank[rootX]<rank[rootY]){
			parent[rootX]=rootY;
		}else if(rank[rootY]<rank[rootX]){
			parent[rootY]=rootX;
		}else{
			parent[rootY]=rootX;
			rank[rootX]++;
		}
	}
	bool isConnected(int x,int y){
		return find(x)==find(y);
	}
};
int t;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr),cout.tie(nullptr);
	DSU uf(30005);
	cin>>t;
	while(t--){
		char ch;
		int a,b;
		cin>>ch>>a>>b;
		if(ch=='M'){
			uf.unionSets(a,b);
		}else{
			if(uf.isConnected(a,b)){
				cout<<1;
			}else{
				cout<<-1;
			}
			cout<<endl;
		}
	}
	return 0;
}

本地过了啊,交上去调不出来(满江红QWQ),不就是按秩合并的优化版并查集吗?

2025/7/27 21:46
加载中...