599

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>

using namespace std;
int parent[26];
int countNodes[26];

int getparent(int n)
{
	if(parent[n]==n)
	return n;
	else
	return parent[n]=getparent(parent[n]);
}

void unite(int a,int b)
{
	parent[getparent(a)]=getparent(b);
}
int main()
{
	int t;
	string str;
	scanf("%d",&t);
	getchar();
	while(t--)
	{
		str="";
		for(int i=0;i<26;i++)
		{
			parent[i]=i;
			countNodes[i]=0;
		}
		while(getline(cin,str),str[0]!='*')
		{
			unite(str[1]-'A',str[3]-'A');
		}
		getline(cin,str);
		for(int i=0;i<str.size();i++)
		{
			if(str[i]!=',')
			countNodes[getparent(str[i]-'A')]+=1;
		}
		int tree=0,acron=0;
		for(int i=0;i<26;i++)
		{
			if(countNodes[i]>1)
			tree+=1;
			else if(countNodes[i]==1)
			acron+=1;
		}
		printf("There are %d tree(s) and %d acorn(s).\n",tree,acron);
	}
	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *