http://poj.org/problem?id=2570

题意:在海底有一些网络节点。每个节点之间都是通过光缆相连接的。不过这些光缆可能是不同公司的。

现在某个公司想从a点发送消息到b点,问哪个公司可以提供这个服务。

首先输入一共有几个公司。

其次输入的是a,b两点之间的光缆是由哪几个公司提供的。0 0结束。

然后询问a,b之间是否可以有公司提供服务,有就输出那个公司,没有的话就输出-

思路:当我看到这个题,我也不知道具体怎么去操作,然后百度了一下,发现了一个人的思路很好。对于a-z这些字母。全部都是用2进制来表示

比如 abc,那么用二进制表示的也就是00000000000000000000000111,如果这个公司有服务的话,那么这个位置也就是1

然后在判断的时候,通过与或来进行判断

二进制的或 | 就是在同一个二进制位,有1则为1。                                    比如 0101 | 1000     答案是 1101。

二进制的与 & 就是在同一个二进制位,两个都是1才为1,                           比如 1010 & 1001    答案是 1000。

二进制的取反 ~ 就是在这个二进制数中,1全部变成0,0全部变成1               比如 ~1100             答案是 0011。

二进制的 ^ 就是在同一个二进制位中,两个相同的数的结果就为0,不同就为1  比如 1100^1011      答案是 0111。

#include <stdio.h>
#include <string.h> int n,graph [ ][ ]; void floyd()
{
for( int k = ; k <= n ; k++ )
for( int i = ; i <= n ; i++ )
for( int j = ; j <= n ; j++ )
graph [ i ][ j ] |= ( graph[ i ][ k ] & graph [ k ][ j ]);
} int main()
{
// freopen("in.txt","r",stdin);
while( scanf("%d",&n) , n )
{
memset( graph , , sizeof( graph ) );
int a,b;
char c[ ];
while( scanf("%d%d",&a,&b) , a || b )
{
scanf("%s",c);
for(int i = ; i < strlen(c) ; i++ )
graph [ a ][ b ] = graph[ a ][ b ]|(<<c[ i ]-'a');
}
floyd();
while(scanf("%d%d",&a,&b),a||b)
{
for(char d = 'a' ; d <= 'z' ; d++)
if( graph[ a ][ b ] & (<<d-'a')) printf("%c",d);
if( graph [ a ][ b ] == ) printf("-");
printf("\n");
}
printf("\n");
}
return ;
}

POJ 2570(floyd)的更多相关文章

  1. poj 2570 Fiber Network(floyd)

    #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ...

  2. poj 1847( floyd && spfa )

    http://poj.org/problem?id=1847 一个水题,用来熟悉熟悉spfa和floyd的. 题意:有m条的铁路,要从x,到y, 之后分别就是条铁路与其他铁路的交点.第一个输入的为有n ...

  3. poj 2240(floyd)

    http://poj.org/problem?id=2240 题意:有些人会利用货币的不用汇率来进行套现,比如1美元换0.5英镑,而1英镑又可以换10法郎,而1法郎又可以换0.21的美元,那么经过货币 ...

  4. poj 1125 (floyd)

    http://poj.org/problem?id=1125. 题意:在经纪人的圈子里,他们各自都有自己的消息来源,并且也只相信自己的消息来源,他们之间的信息传输也需要一定的时间.现在有一个消息需要传 ...

  5. poj 3311(floyd+状态压缩)

    题目链接:http://poj.org/problem?id=3311 思路:Floyd + 状态压缩DP  题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且 ...

  6. Sightseeing trip POJ - 1734 -Floyd 最小环

    POJ - 1734 思路 : Floyd 实质 dp ,优化掉了第三维. dp [ i ] [ j ] [ k ] 指的是前k个点优化后    i  ->  j   的最短路. 所以我们就可以 ...

  7. Poj(2240),Floyd求汇率是不是赚钱

    题目链接:http://poj.org/problem?id=2240. Floyd算法修改一下,我要最大路径(通过转汇率变到最大)改成max. #include <iostream> # ...

  8. poj 3311 floyd+dfs或状态压缩dp 两种方法

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6436   Accepted: 3470 ...

  9. poj 3615(floyd变形)

    题目链接:http://poj.org/problem?id=3615 思路:map[i][j]表示顶点i,j之间的最高的障碍物,于是题目要求的是最高障碍物的最小值,不就是min(map[i][j], ...

随机推荐

  1. python 正则,常用正则表达式大全

    Nginx访问日志匹配 re.compile #re.compile 规则解释,改规则必须从前面开始匹配一个一个写到后面,前面一个修改后面全部错误.特殊标准结束为符号为空或者双引号:  改符号开始 从 ...

  2. some experience duing wrting myweb in php

    书写风格:一切以 最高效, 最简单为 标准!! 不必管格式的规范了! 在html中, 的属性是用双引号, 在php, tp中, 没有特殊情况, 都是用单引号. vim 下how to format c ...

  3. 用友android

    获取token要改 value要改 不用通配符 直接双引号

  4. [译]git clone

    git clone git clone命令copy一个已经存在的Git仓储. git clone有点像svn的checkout, 他的不同之处是这个copy也是一个完整的仓储-它有自己的历史纪录, 能 ...

  5. UIGestureRecognizer

    •为了完成手势识别,必须借助于手势识别器----UIGestureRecognizer • •利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势 • •UIG ...

  6. nyoj 44 子串和 简单动态规划

    子串和 时间限制:5000 ms  |  内存限制:65535 KB 难度:3   描述 给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最 ...

  7. SQL补充

    TOP 子句TOP 子句用于规定要返回的记录的数目.对于拥有数千条记录的大型表来说,TOP 子句是非常有用的.注释:并非所有的数据库系统都支持 TOP 子句.SELECT TOP 2 * FROM P ...

  8. objective-c-sort-keys-of-nsdictionary-based-on-dictionary-entries

    NSArray *keys = [someDictionary allKeys]; NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NS ...

  9. 网络编程3-URL编程(URL)

    1.URL(Uniform Resource Locatior) 统一资源占位符,表示Intenet上某一资源的地址 2.URL的组成部分 传输协议:主机名:端口号:文件名 例:http://192. ...

  10. window 下Qt for android 环境搭建

    ******************************************************************* 转自http://www.cnblogs.com/rophie/ ...