题目:点击打开链接
代码:
#include<stdio.h>
#include<string.h>
int a, q[201][201];
char d[30];
int main()
{
int i, j, k, b, c;
while(~scanf("%d",&a))
{
if(a==0)
return 0;
memset(q,0,sizeof(q));
while(~scanf("%d%d",&b,&c))
{
if(b==0 && c==0)
break;
scanf("%s",d);
for(i=0; d[i]; i++)
{
q[b][c] |= 1<<(d[i]-'a');
}
}
for(k=1; k<=a; k++)
for(i=1; i<=a; i++) {
if (q[i][k] != 0) {
for(j=1; j<=a; j++)
q[i][j] |= (q[i][k] & q[k][j]);
}
}
while(~scanf("%d%d",&b,&c))
{
if(b==0 && c==0)
break;
if (q[b][c] == 0)
putchar('-');
else {
for(i=0; i<26; i++) {
if (q[b][c] & 1<<i)
putchar('a'+i);
}
}
putchar('\n');
}
putchar('\n');
}
return 0;
}
上面用了状态压缩,就说是管总结出来的,他说poj1077就是得用状态压缩,但是那道题我并不会做,,,,,,去看看。