64,642
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include "DisjointSet.h"
#include <iostream>
using namespace std;
void test(){
DisjointSet set(10);
cout << "5所在树的根为" << set.Find(5) << endl;
//printf("5所在树的根为%d\n",set.Find(5));
}
int main(int argc, char* argv[])
{
test();
return 0;
}
#ifndef _DISJOINTSET
#define _DISJOINTSET
class DisjointSet{
private:
int size;
int* parent;
public:
DisjointSet(int s);
void Union(int root1,int root2);
int Find(int x);
};
#endif
#include "DisjointSet.h"
DisjointSet::DisjointSet(int s){
size = s;
parent = new int(size);
for(int i=0;i<size;++i) parent[i] = -1;
}
void DisjointSet::Union(int root1,int root2){
if(root1 == root2) return;
if(parent[root1] < parent[root2]){
parent[root2] = root1;
}else if(parent[root1] > parent[root2]){
parent[root1] = root2;
}else{
parent[root1]--;
parent[root2] = root1;
}
}
int DisjointSet::Find(int x){
if(parent[x] < 0) return x;
return parent[x] = Find(parent[x]);
}