POJ 2570 传递闭包 Floyd
2013-09-22 14:39
381 查看
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11897437
题意:
n个点
下面边 以(0,0)输入结尾
u v 字母, 表示u v间有 xx个字母
问:
(0,0)输入结尾
问 u v间的路径 都存在的字母有哪些,输出这些字母
题意:
n个点
下面边 以(0,0)输入结尾
u v 字母, 表示u v间有 xx个字母
问:
(0,0)输入结尾
问 u v间的路径 都存在的字母有哪些,输出这些字母
#include <cstdio> #include <cstring> #include <iostream> #include <math.h> #include <queue> #define N 250 #define M N*N+2 #define inf64 0x7ffffff #define inf 0x7ffffff using namespace std; inline int Min(int a,int b){return a>b?b:a;} int map ; int main() { int n,u,v; char name[30]; while(scanf("%d",&n),n){ memset(map,0,sizeof(map)); scanf("%d %d ",&u,&v); while(u!=0 && v!=0){ scanf("%s",name); for(int i=0;i<strlen(name);i++) map[u][v]|=1<<(name[i]-'a'); scanf("%d%d",&u,&v); } for (int k = 1;k <= n;k ++) //floyd for (int i = 1;i <= n;i ++) for (int j = 1;j <= n;j ++) if (map[i][k]&map[k][j]) map[i][j] = map[i][j]|(map[i][k]&map[k][j]); scanf("%d %d",&u,&v); while(u!=0 && v!=0){ if(map[u][v]){ for(int i=0;i<30;i++)if(map[u][v]&(1<<i))printf("%c",i+'a'); } else printf("-"); puts(""); scanf("%d %d",&u,&v); } puts(""); } return 0; } /* 3 1 2 abc 2 3 ad 1 3 b 3 1 de 0 0 1 3 2 1 3 2 0 0 2 1 2 z 0 0 1 2 2 1 0 0 */
相关文章推荐
- poj 2570 Fiber Network(传递闭包,floyd+位运算)
- poj 2570 Fiber Network --floyd求传递闭包加位运算
- POJ 2570 floyd(传递闭包+状态压缩)
- Cow Contest POJ - 3660(传递闭包,floyd)
- Cow Contest POJ - 3660(Floyd,传递闭包)
- poj 2570 Fiber Network Floyd
- POJ--2570--Fiber Network【floyd+位运算】
- [floyd]poj 2570 fiber network #floyd+位运算
- poj 1975 Median Weight Bead(传递闭包 Floyd)
- POJ 2570 Fiber Network (传递闭包)
- POJ 3660 Cow Contest (Floyd运用到传递闭包中~)
- POJ 3660 Cow Contest (Floyd求传递闭包)
- POJ 3660 Cow Contest floyd求传递闭包 || bfs
- Cow Contest POJ - 3660 (floyd求传递闭包)
- poj 2570 Fiber Network(floyd)
- poj——3660(图论之传递闭包(floyd))
- POJ3660 Cow Contest(Floyd求传递闭包)
- POJ 3660 Cow Contest 【floyd求传递闭包 + 思维好题】
- poj 2570 Fiber Network(floyd)
- POJ 3275 Ranking the Cows floyd求传递闭包 || bfs