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. 平衡二叉树(AVL)c语言实现

    参考: 二叉平衡树的插入和删除操作 平衡二叉树,AVL树之图解篇 [查找结构3]平衡二叉查找树 [AVL] #include "stdio.h" #include "st ...

  2. git高级命令

    git reflog 显示所有branch的commit,包括commit和reset,以及已删除的commit.而git log只显示当前branch的commit,不包括已删除的commit gi ...

  3. linux下vim更改注释颜色

    我linux下默认底色是黑色,字体是绿色,但是注释默认是蓝色,,很不爽...所以要更改注释颜色......以下文章来自转载. from: http://blog.csdn.net/gz109/arti ...

  4. TeX — Beauty and Fun

    我是初学者,你推荐使用什么发行的 TeX? 我应该用 LaTeX 吗? 我认为最好的发行是 TeXLive CD,它不但包含了所有操作系统需要的程序,而且有许许多多宏包,如果你不是特别特殊的用户,有了 ...

  5. 源码编译安装 screen

    本文转自:http://blog.163.com/oracle_wwf/blog/static/213030127201211191481101/ [root@web1 soft]# wget ftp ...

  6. LAMP环境CentOS6.4 PHP5.4随笔未整理

    首先安装一些辅助的软件或者说是依赖的关系包. 1.安装libxml2: libxml是一个用来解析XML文档的函数库.它用C语言写成, 并且能为多种语言所调用,例如C语言,C++,XSH.C#, Py ...

  7. hdu4920 Matrix multiplication 模3矩阵乘法

    hdu4920 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 ...

  8. [译]JavaScript:将字符串两边的双引号转换成单引号

    原文:http://ariya.ofilabs.com/2012/02/from-double-quotes-to-single-quotes.html 代码的不一致性总是让人发狂,如果每位开发者都能 ...

  9. 在nodejs下express 从安装到运行的全过程

    安装过程: npm install -gd express  npm install -g express-generator  express -V //查看版本,现在一般都是4.x系列的 expr ...

  10. java httpclient发送json 请求 ,go服务端接收

    /***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOEx ...