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. 界面调试工具reveal

    iOS界面调试工具 Reveal 转自 http://chuansong.me/n/1308113 原创2015-04-17 唐巧iOS开发 Reveal是一个iOS程序界面调试工具.使用Reveal ...

  2. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  3. OS命令注入

    SSL http://kb.cnblogs.com/page/162080/ http://baike.baidu.com/link?url=jPitKuDw_ncDlMbOc1SkWzM9TuKX9 ...

  4. php中pdo例子

    下面是从其他博客看到的代码 <?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', ''); $db ...

  5. linuxMint install shuruma

    http://my.oschina.net/u/1446273/blog/306053 http://blog.sina.com.cn/s/blog_5d406a1b0101jlgn.html htt ...

  6. 分词工具ICTCLAS5.0使用心得

    接触自然语言处理有一年多了,最基本的一些自然是分词,词性标注,命名实体识别之类的知识,有些应用知道原理是一回事,自己动手做起来又是另外一回事了.最近又开始重操旧业:分词.分词最著名的自然就是中科院的分 ...

  7. C#对HTML文档的解析

    http://www.2cto.com/kf/201312/268777.html http://jingyan.baidu.com/article/7e44095334bb162fc0e2efad. ...

  8. flask 知识点总结

    ============================request对象的常用属性============================具体使用方法如下:request.headers, requ ...

  9. nginx TCP 代理& windows傻瓜式安装

    一.下载nginx Windows http://nginx.org/en/download.html 二.解压到目录 三.进入目录并start nginx.exe即可启动 cd d:/java/ng ...

  10. Java中将unix时间戳转化为正常显示时间

    在unix中时间戳是一串数字表示的,使用起来非常不方便,转化方式如下: //Convert Unix timestamp to normal date style public String Time ...