一、题目
二、分析
使用map将每个名字映射成一个数字。
使用并查集维护学生之间的关系,并维护每个学校的人数。
三、代码
#include <bits/stdc++.h>
using namespace std;
const int N = 10010;
int n;
int f[N];
int s[N];
map<string,int> M;
int find(int x)
{
if(f[x]!=x)
f[x]=find(f[x]);
return f[x];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
f[i]=i;
s[i]=1;
string op;
cin>>op;
M[op]=i;
}
int q;
cin>>q;
while(q--)
{
string op1,op2;
cin>>op1>>op2;
int a=find(M[op1]),b=find(M[op2]);
f[a]=b;
s[b]+=s[a];
}
int sum=0,Max=0;
for(int i=1;i<=n;i++)
{
if(f[i]==i)
{
sum++;
Max=max(Max,s[i]);
}
}
cout<<sum<<" "<<Max<<endl;
return 0;
}