【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 "); } }