并查集
把姓名对应成数字就行了,一开始做丑了,用了个类把姓名数字绑定了,后面发现用不着,用个
String数组,下标跟姓名对应就够了
import java.util.Scanner;
public class Main{
static int []pre= new int[1005];
static String []is =new String[1005];
static int find(int x){
return pre[x]=pre[x]==x?x:find(pre[x]);
}
static void merge(int x, int y){
int fx=find(x);
int fy=find(y);
if(fx!=fy){
pre[fx]=pre[fy];
}
}
static int getnum(String s,int n){
for(int i=1;i<=n;i++){
if(s.equals(is[i]))
return i;
}
return 0;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=n;i++){
String ts=sc.next();
is[i]=ts;
pre[i]=i;
}
int m=sc.nextInt();
for(int i=1;i<=m;i++){
String s1=sc.next();
String s2=sc.next();
int x=getnum(s1,n);
int y=getnum(s2,n);
merge(x,y);
}
int cnt=0;
for(int i=1;i<=n;i++){
if(pre[i]==i)
cnt++;
}
int ma=0;
for(int i=1;i<n;i++){
int t=1;
for(int j=i+1;j<=n;j++){
if(find(i)==find(j))
t++;
}
if(t>ma)
ma=t;
}
System.out.print(cnt+" "+ma);
}
}