您的位置:首页 > 其它

poj 2570 Fiber Network floyd + 位运算

2012-06-30 20:57 375 查看
View Code

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define re(i,n) for(int i=1;i<=n;i++)
const int maxn = 202;
int map[maxn][maxn];
int n;
void floyd() {
re(k,n) re(i,n) {
if(i==k | !map[i][k]) continue;
re(j,n) {
if(j==k || !map[k][j]) continue;
map[i][j] |= map[i][k] & map[k][j];
}
}
}
int main() {
while(~scanf("%d",&n) && n) {
int u,v;  char c;
memset(map,0,sizeof(map));
while(scanf("%d%d",&u,&v)) {
if(u==0 && v==0) break;
for(;(c=getchar())!='\n';map[u][v]|=1<<c-'a');
}
floyd();
while(scanf("%d%d",&u,&v)) {
if(u==0 && v==0) { putchar('\n');break; }
bool ok = 0;
for(int i=0;i<26;i++) {
if(map[u][v] & 1<<i) ok = 1 , putchar('a'+i);
}
if(!ok) putchar('-');
putchar('\n');
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: