zoj 1967 Fiber Network/poj 2570

题意就是 给你 n个点 m条边 每条边有些公司支持 问 a点到b点的路径有哪些公司可以支持 这里是一条路径中要每段路上都要有该公司支持 才算合格的一个公司
// floyd 加 位运算
// 将每个字符当成二进制中的一位就好
#include <iostream> #include <map> #include <algorithm> #include <queue> #include <math.h> #include <stdio.h> #include <string.h> #include <vector> using namespace std; #define MOD 1000000007 #define maxn 210 int dp[maxn][maxn]; int main(){ int n; int A,B; char ch[29]; int i,j,k; while(scanf("%d",&n),n){ memset(dp,0,sizeof(dp)); while(scanf("%d %d",&A,&B),A|B){ scanf("%s",ch); for(i=0;ch[i]!='';i++) dp[A][B]|=(1<<(ch[i]-'a')); } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) dp[i][j]|=(dp[i][k]&dp[k][j]); while(scanf("%d %d",&A,&B),A|B){ if(!dp[A][B]) printf("-"); for(i=dp[A][B],j=0;i>0;i=i>>1,j++) if(i&1) printf("%c",j+'a'); printf(" "); } printf(" "); } }
原文地址:https://www.cnblogs.com/372465774y/p/3196505.html