【BZOJ4956】lydsy七月月赛 I 乱搞

【BZOJ4956】lydsy七月月赛 I

题面

题解:傻题,Floyd传递闭包即可~

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int map[30][30];
int n,m,l1,l2;
char s1[60],s2[60];
int main()
{
	scanf("%d%d",&n,&m);
	int i,j,k;
	for(i=0;i<26;i++)	map[i][i]=1;
	for(i=1;i<=n;i++)	scanf("%s%s",s1,s2),map[s1[0]-'a'][s2[0]-'a']=1;
	for(k=0;k<26;k++)	for(i=0;i<26;i++)	for(j=0;j<26;j++)	map[i][j]|=map[i][k]&map[k][j];
	for(i=1;i<=m;i++)
	{
		scanf("%s%s",s1,s2),l1=strlen(s1),l2=strlen(s2);
		if(l1!=l2)
		{
			printf("no
");
			continue;
		}
		for(j=0;j<l1;j++)	if(!map[s1[j]-'a'][s2[j]-'a'])	break;
		if(j==l1)	printf("yes
");
		else	printf("no
");
	}
}
原文地址:https://www.cnblogs.com/CQzhangyu/p/7265405.html