POJ 2570

可以看成floyd,用bool变量标记公司

View Code
 1 #include<cstdio>

 2 #include<cstring>

 3 #include<set>

 4 using namespace std;

 5 bool ss[300][300][30];

 6 void floyd(int n)

 7 {

 8     for(int k=1;k<=n;k++)

 9     {

10         for(int i=1;i<=n;i++)

11         {

12             if(ss[i][k][26])

13             {

14                 for(int j=1;j<=n;j++)

15                 {

16                     for(int t=0;t<26;t++)

17                         if(ss[i][k][t]&&ss[k][j][t])

18                         {

19                             ss[i][j][26]=ss[i][j][t]=true;

20                         }

21                 }

22             }

23         }

24     }

25 }

26 int main()

27 {

28     int n;

29     while(scanf("%d",&n)&&n)

30     {

31         memset(ss,false,sizeof(ss));

32         int a,b;

33         char s[30];

34         while(scanf("%d%d",&a,&b)&&a&&b)

35         {

36             scanf("%s",s);

37             for(int i=0;s[i];i++)

38                 ss[a][b][s[i]-'a']=true;

39             ss[a][b][26]=true;

40         }

41         floyd(n);

42         while(scanf("%d%d",&a,&b)&&a&&b)

43         {

44             if(!ss[a][b][26])

45             {

46                 printf("-\n");

47             }

48             else

49             {

50                 for(int i=0;i<26;i++)

51                     if(ss[a][b][i])

52                         putchar(char(i+'a'));

53                 printf("\n");

54             }

55         }

56         printf("\n");

57     }

58     return 0;

59 }

你可能感兴趣的:(poj)