博文
并查集的应用PKU1703(2008-08-21 13:13:00)
摘要:///////////////////////////////////////////作品名称:并查集应用//作者姓名:满天飞//作品时间:2008-8-15//最后修改:2008-8-15//Q Q 号码:280282813//版权所有,翻版必究/////////////////////////////////////////#include<stdio.h>#define MAX 100010int ary[MAX];int opt[MAX];void Init(int n){ int i; for(i = 0; i <= n+10; ++i) { ary[i] = -1; opt[i] = -1; }}int Find(int index){ if(ary[index] < 0) return index; return ary[index] = Find(ary[index]);}int Union(int first, int second){ int i, j; if(second == -1) return first; i = Find(first); j = Find(second); if(i == j) return i; if(ary[i] < ary[j]) { &......
并查集的应用PKU2524(2008-08-21 13:12:00)
摘要:///////////////////////////////////////////作品名称:并查集应用//作者姓名:满天飞//作品时间:2008-8-15//最后修改:2008-8-15//Q Q 号码:280282813//版权所有,翻版必究/////////////////////////////////////////#include<iostream>using namespace std;class Set{ private: int* ary; int length; public: int Find(int index); bool Union(int first, int second); Set(int n); int Count(); virtual ~Set(){delete[]ary;}};int Set::Count(){ int i, ct; ct = 0; for(i = 1; i <= length; ++i) { if(ary[i] < 0) ct++; } return ct;}Set::Set(int n){ &nbs......
并查集的应用PKU2492(2008-08-21 13:11:00)
摘要:///////////////////////////////////////////作品名称:并查集应用//作者姓名:梁岳传//作品时间:2008-8-15//最后修改:2008-8-15//Q Q 号码:280282813//版权所有,翻版必究/////////////////////////////////////////#include<iostream>using namespace std;#define MAX 1000010int ary[MAX];int opt[MAX];void Init(int n){ int i; for(i = 0; i <= n+10; ++i) { ary[i] = -1; opt[i] = -1; }}int Find(int index){ if(ary[index] < 0) return index; return ary[index] = Find(ary[index]);}int Union(int first, int second){ int i, j; if(second == -1) return first; i = Find(first); j = Find(second); if(i == j) return i; if(ary[i] < ary[j]) ......
并查集的应用PKU2236(2008-08-21 13:10:00)
摘要:///////////////////////////////////////////作品名称:并查集应用//作者姓名:梁岳传//作品时间:2008-8-16//最后修改:2008-8-16//Q Q 号码:280282813//版权所有,翻版必究////////////////////////////////////////#include<iostream>#include<cmath>using namespace std;typedef struct{ int x; int y; int parent;}Node;class Set{ public: Node* ary; int length; public: int Find(int index); bool Union(int first, int second); Set(int n); virtual ~Set(){delete[]ary;}};Set::Set(int n){ int i; ary = new Node[n+10]; length = n; for(i = 1; i <= n; ++i) { cin>>ary[i].x>>ary[i].y; &......
并查集的实现及应用:最小生成树(2008-08-15 10:40:00)
摘要:///////////////////////////////////////// //作品名称:并查集的实现及应用
//作者姓名:梁岳传//作品时间:2008-8-15//最后修改:2008-8-15 //Q Q 号码:280282813 //版权所有,翻版必究 ///////////////////////////////////////// #include<iostream>
using namespace std;
class Set{private: int* ary; int length;public: int Find(int index); bool Union(int first, int second); Set(int n); virtual ~Set(){delete[]ary;}
};
Set::Set(int n){ int i; ary = new int[n]; length = n; for(i = 0; i < n; ++i) ary[i] = -1;}
//将每次查找过的路线上的结点全部都指向根结点int Set::Find(int index){ int i, j, t;
if(index < 0 || index >= length) return -1; //查找index元素的根结点 for(i = index; ary[i] >= 0; i = ary[i]); //将这条路线上的所有元素全部指向根结点 for(j = index; j != i; j = t){ t = ary[j]; ary[j] = i; }
return i;}
//树的根结点保存树的元素个数,以负值的形式保存bool Set::Union(int first, int second){ int i, j; if(first < 0 || first >= length) re......
