题意:
在一个有n个结点的图中,点a,b之间可以有属于不同公司的边,现在要查询对于点a,b,有哪些公司可以从属于本公司的边上从a到b。
思路:
对每个公司都建图,直接floyd。
代码:
//poj 2570
//sepNINE
#include <iostream>
using namespace std;
const int maxN=210;
int g[30][maxN][maxN];
int main()
{
int n;
while(scanf("%d",&n)==1&&n){
int a,b,i,j,k,t,x;
char tmp[32];
memset(g,-1,sizeof(g));
while(1){
scanf("%d%d",&a,&b);
if(a==0)
break;
scanf("%s",tmp);
for(i=0;tmp[i]!='\0';++i){
x=tmp[i]-'a';
g[x][a][b]=1;
}
}
for(t=0;t<26;++t)
for(k=1;k<=n;++k)
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
if(g[t][i][k]!=-1&&g[t][k][j]!=-1)
g[t][i][j]=1;
while(1){
scanf("%d%d",&a,&b);
if(a==0)
break;
int flag=0;
for(t=0;t<26;++t)
if(g[t][a][b]==1){
printf("%c",t+'a');
flag=1;
}
if(flag==0)
printf("-");
printf("\n");
}
printf("\n");
}
return 0;
}