# include <stdio.h>
# include <string.h>
int parent[27];
int in[27],out[27];
void unit()
{
int i;
for(i=1;i<27;i++)
parent[i]=i;
}
int father(int x)
{
return parent[x]==x?x:(parent[x]=father(parent[x]));
}
void uniou(int a,int b)
{
int x1=father(a);
int x2=father(b);
if(x1!=x2)
parent[x1]=x2;
return ;
}
int main()
{
int T,t,i;
char word[1005];
scanf("%d",&T);
while(T--)
{
scanf("%d",&t);
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
unit();
for(i=1;i<=t;i++)
{
scanf("%s",word);
int len =strlen(word);
int a =word[0]-'a'+1;
int b = word[len-1]-'a'+1;
//printf("%d",b);
in[a]++;
out[b]++;
uniou(a,b);
}
int sum=0;
for(i=1;i<=26;i++)
if((in[i]||out[i])&&parent[i]==i)
sum++;
if(sum!=1)
printf("The door cannot be opened.\n");
else
{
int f1=0,f2=0,f3=0;
for(i=1;i<=26;i++)
{
if(in[i]-out[i]==1) f1++;
if(in[i]-out[i]==-1) f2++;
if(in[i]-out[i]==0) f3++;
}
if((f1==0&&f2==0||f1==1&&f2==1)&&(f1+f2+f3)==26)
printf("Ordering is possible.\n");
else
printf("The door cannot be opened.\n");
}
}
return 0;
}
并查集还是要好好练练
hdu 1116
最新推荐文章于 2020-05-08 15:42:36 发布