EOJ_1081_朋友圈
作者:互联网
//每个俱乐部的第一个人是老大,但是要知道每个俱乐部的老大是不是别人的小弟,
//原则是,每次合并关系,都是老大和老大的比较
#include<bits/stdc++.h>
using namespace std;
int parent[30003];
int findParent(int parent[], int i)
{
int tmpi = i;
while(parent[i]>=0) i = parent[i];
//路径压缩
while(tmpi!=i){
int tmpParent = parent[tmpi];
parent[tmpi] = i;
tmpi = tmpParent;
}
return i;
}
int unionParent(int parent[], int i, int j)
//返回根节点
{
int rooti = findParent(parent, i);
int rootj = findParent(parent, j);
if(rootj==rooti) return rooti;
int tmpCount= parent[rooti] + parent[rootj];
if(parent[rooti]>parent[rootj]){
parent[rooti] = rootj;
parent[rootj] = tmpCount;
return rootj;
}
else{
parent[rootj] = rooti;
parent[rooti] = tmpCount;
return rooti;
}
}
int main()
{
int numStu, numClub;
cin>>numStu>>numClub;
int cnt=-1,ans=-1;
for(int i=0;i<numStu;i++) parent[i]=-1;
for(int i=0;i<numClub;i++){
int stuClub,tmpRoot;
cin>>stuClub>>tmpRoot;
for(int j=1;j<stuClub;j++){
int tmpStu;
cin>>tmpStu;
cnt = unionParent(parent, tmpRoot, tmpStu);
ans = min(ans, parent[cnt]);
}
}
cout<<-ans<<endl;
return 0;
}
标签:rooti,1081,parent,rootj,int,EOJ,return,朋友圈,tmpi 来源: https://blog.csdn.net/xyc859666356/article/details/121161612