【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\n");
continue;
}
for(j=0;j<l1;j++) if(!map[s1[j]-'a'][s2[j]-'a']) break;
if(j==l1) printf("yes\n");
else printf("no\n");
}
}
05-28 20:06