zoj 1967 && poj 2570 Fiber Network
2015-03-04 12:07
441 查看
题意:有n个站点,站点与站点之间有一些公司负责线路线路,查询所有可以提供从站点a到的站点b的线路连接的公司。
思路:用floyd的思想求解,将递推公式修改为 a[i][j] |= a[i][k] & a[k][j]。这题运用二进制表示集合可以方便的求解,因为公司只用小写字母表示,所以最多只有26个公司,用一个整数就可以表示这个集合。求解路径时,我们求得不是最短路径,而是求这条路径上集合的交集然后并上其他路径上的交集。
代码:
思路:用floyd的思想求解,将递推公式修改为 a[i][j] |= a[i][k] & a[k][j]。这题运用二进制表示集合可以方便的求解,因为公司只用小写字母表示,所以最多只有26个公司,用一个整数就可以表示这个集合。求解路径时,我们求得不是最短路径,而是求这条路径上集合的交集然后并上其他路径上的交集。
代码:
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int maxn = 205; int n; int a[maxn][maxn]; bool input(){ scanf("%d",&n); if(!n) return false; int u,v; char w[30]; //清零 for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ a[i][j] = 0; } } while(1){ scanf("%d%d",&u,&v); if(u + v == 0) break; scanf("%s",&w); for(int i = 0; i < strlen(w); i++) a[u][v] |= (1<<w[i]-'a'); } return true; } void solve(){ for(int k = 1; k <= n; k++){ for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ a[i][j] |= a[i][k] & a[k][j]; } } } int u,v; while(1){ scanf("%d%d",&u,&v); if(u + v == 0) break; if(a[u][v]){ for(int i = 0; i < 26; i++){ if(a[u][v] & (1<<i)) putchar('a'+i); } } else{ putchar('-'); } puts(""); } puts(""); } int main(){ while(input()){ solve(); } return 0; }
相关文章推荐
- zoj 1967 Fiber Network/poj 2570
- zoj 1967 Fiber Network(位运算&&FLOYD)
- Poj 1967 &&Zoj 2183 Alibaba
- Poj 1967 &&Zoj 2183 Alibaba
- poj 1637 & zoj 1992 混合图的欧拉回路
- POJ 2570 Fiber Network
- poj 2029 && zoj 1716 Get Many Persimmon Trees
- poj 2063& zoj 2224 Investment (多次完全背包)
- zoj 1031& poj 1084 (Dancing Links 重复覆盖)
- POJ 2570 Fiber Network (传递闭包)
- ZOJ 1857 && POJ 2607 Fire Station【SPFA】
- ZOJ 1133 & POJ 1142 Smith Numbers
- poj 1014 & zoj 1149 Dividing(多重背包+倍增思想优化)
- ZOJ 1066 Square Ice(POJ 1099)(找规律&模拟)
- POJ 3660 && NYIST 211 Cow Contest && ZOJ 1060 Sorting It All Out【Floyd算法扩展应用】
- poj 3067 && zoj 3129
- zoj 1333 && poj 1545 Galactic Import(floyd)
- poj 3268 Silver Cow Party & zoj 2008 Invitation Cards
- poj 2570 Fiber Network 一直每条边可以通过某些公司过去,问从a到b可以通过那几个公司(同一个)过去
- zoj 1061 &&poj 0128 Web Navigation(STL 栈~~水)