poj 2570 Fiber Network(floyd)
2013-04-23 09:27
330 查看
题意:某条道路由一些公司修建,修建道路的公司可以提供这条路上的连通,询问哪些公司可以提供从A到B的路径.每个公司由一个小写字母表示。
思路:因为只有26个字母 所以可能用二进制去表示每个公司 1表示该路径上有该公司 比如说 1-->3
这条路径上有 abc这三个公司 则mat[1][3] 二进制表示为00..0111;
然后就是用floyd传递闭包。
//408K
63MS
#include <stdio.h>
#include <string.h>
#define M 250
int mat[M][M];
void print(int num)
{
char
s[30];
int k =
0,count = 0;
while
(num)
{
if (num&1)
s[k++] = 'a' + count;
count ++;
num = num>>1;
}
s[k] =
'\0';
printf
("%s\n",s);
}
int main ()
{
char
str[30];
int
n,u,v;
while (scanf
("%d",&n)&&n)
{
memset (mat,0,sizeof(mat));
while (scanf ("%d%d",&u,&v))
{
if (u == 0 && v == 0)
break;
scanf ("%s",str);
for (int i = 0;str[i]!= '\0';i
++)
//转换成二进制表示
mat[u][v] =
mat[u][v]|(1<<(str[i]-'a'));
}
for (int k = 1;k <= n;k
++)
//floyd
for (int i = 1;i <= n;i ++)
for (int j = 1;j <= n;j ++)
if (mat[i][k]&mat[k][j])
mat[i][j] = mat[i][j]|(mat[i][k]&mat[k][j]);
while (scanf ("%d%d",&u,&v))
{
if (u == 0 && v == 0)
break;
if (mat[u][v])
print (mat[u][v]);
else
printf ("-\n");
}
printf ("\n");
}
return
0;
}
思路:因为只有26个字母 所以可能用二进制去表示每个公司 1表示该路径上有该公司 比如说 1-->3
这条路径上有 abc这三个公司 则mat[1][3] 二进制表示为00..0111;
然后就是用floyd传递闭包。
//408K
63MS
#include <stdio.h>
#include <string.h>
#define M 250
int mat[M][M];
void print(int num)
{
char
s[30];
int k =
0,count = 0;
while
(num)
{
if (num&1)
s[k++] = 'a' + count;
count ++;
num = num>>1;
}
s[k] =
'\0';
printf
("%s\n",s);
}
int main ()
{
char
str[30];
int
n,u,v;
while (scanf
("%d",&n)&&n)
{
memset (mat,0,sizeof(mat));
while (scanf ("%d%d",&u,&v))
{
if (u == 0 && v == 0)
break;
scanf ("%s",str);
for (int i = 0;str[i]!= '\0';i
++)
//转换成二进制表示
mat[u][v] =
mat[u][v]|(1<<(str[i]-'a'));
}
for (int k = 1;k <= n;k
++)
//floyd
for (int i = 1;i <= n;i ++)
for (int j = 1;j <= n;j ++)
if (mat[i][k]&mat[k][j])
mat[i][j] = mat[i][j]|(mat[i][k]&mat[k][j]);
while (scanf ("%d%d",&u,&v))
{
if (u == 0 && v == 0)
break;
if (mat[u][v])
print (mat[u][v]);
else
printf ("-\n");
}
printf ("\n");
}
return
0;
}
相关文章推荐
- Poj 2570 Fiber Network Floyd思想处理
- poj&nbsp;2349&nbsp;Arctic&nbsp;Network&nbsp;mst(最小…
- poj&nbsp;1861&nbsp;network&nbsp;(kruskal)
- poj&nbsp;3275&nbsp;Ranking&nbsp;the&nbsp;Cows(floyd&nbsp;…
- poj&nbsp;1459&nbsp;power&nbsp;network(网络流&nbsp;sa…
- poj&nbsp;1847&nbsp;Tram(floyd)
- poj 1125 简单的floyd应…
- POJ 1861 Network
- ACM: DP+floyd 动态规划题 poj 117…
- poj&nbsp;1603&nbsp;Risk(floyd)
- poj&nbsp;2112&nbsp;Optimal&nbsp;Milking(floyd+…
- poj 2570 floyd算法+二进制的应用
- poj&nbsp;1144&nbsp;Network(割点)
- poj 1734 Floyd算求有向图的最小环
- POJ 2236 Wireless Network
- poj&nbsp;1459&nbsp;power&nbsp;network(网络流&nbsp;di…
- poj 2570 Fiber Network floyd + 位运算
- poj 2570 Fiber Network Floyd
- ACM: 图论题 poj 2240 (floyd + ST…
- poj&nbsp;3278&nbsp;宽搜