每对朋友都存在pair中
#include<iostream>
#include<vector>
#include<utility>
using namespace std;
static int p[100];
int Find(int x) //返回x的父节点
{
if(p[x]!=x)
p[x]=Find(p[x]); //这两步包含了路径压缩
return p[x];
}
void Union(int x,int y) //合并x和y的朋友圈
{
int fx=Find(x);
int fy=Find(y);
if(fx!=fy)
p[fx]=fy;
}
void solve(vector<pair<int,int> > friends,int nums,int x,int y) //判断x和y是不是朋友
{
for(int i=1;i<=nums;++i)
p[i]=i;
for(auto &e:friends)
Union(e.first,e.second);
/* 这一步可以计算有几个朋友圈
int cnt=0;
for(int i=1;i<=nums;++i)
if(p[i]==i)
++cnt;
cout<<cnt<<endl;
*/
if(Find(y)==Find(x))
cout<<"they are friends"<<endl;
else
cout<<"they are not friends"<<endl;
}