poj 2524 这是并查集的最简模型了吧

没啥说的,最简单的并查集模型了,什么多余的工作都不用做,没有节点信息需要你更新。

代码如下:

另外,还是因为一个巨白痴的错误WA了很多次,哭啊。。。

#include <iostream> using namespace std; struct { int parent; }student[50005]; void MakeSet(int SizeOfInt) { for (int i = 1;i <= SizeOfInt;i++) student[i].parent=i; } void Union(int RootOfX,int RootOfY,int NodeX,int NodeY) { student[RootOfY].parent = RootOfX; } int Find(int NodeToFind) { if(student[NodeToFind].parent==NodeToFind) return NodeToFind; student[NodeToFind].parent = Find(student[NodeToFind].parent); return student[NodeToFind].parent; } int main() { int Case = 1; int NumOfStudents,NumOfPairs; while (cin>>NumOfStudents>>NumOfPairs&&NumOfStudents!=0) { MakeSet(NumOfStudents+1); int temp = NumOfStudents; int x,y,rootx,rooty; while (NumOfPairs--) { scanf("/n%d %d",&x,&y);//300MS //cin>>x>>y;//1800MS rootx=Find(x); rooty=Find(y); if(rootx!=rooty) { NumOfStudents--; Union(rootx,rooty,x,y); } } cout<<"Case "<<Case++<<": "<<NumOfStudents<<endl; } }

你可能感兴趣的:(工作)