zoukankan      html  css  js  c++  java
  • POJ2570 Fiber Network 状态压缩+floyd

    题意:给定一个网络,每条线路都同时有几个公式拥有,现在问某两点之间哪些公司通过自己拥有的路径单独联通。

    分析:问题开起来是给定了多个图,对他们分别求一个连通性,但是这里把多个图压缩到一个int型数字内,因为这里只是简简单单求一个连通性,使用位运算非常高效。

    代码如下:

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    int G[205][205];
    int N;
    
    void floyd() {
        for (int k = 1; k <= N; ++k) {
            for (int i = 1; i <= N; ++i) {
                if (G[i][k] == 0 || i == k) continue;
                for (int j = 1; j <= N; ++j) {
                    if (G[k][j] == 0 || j == k) continue;
                    G[i][j] |= G[i][k] & G[k][j];
                }
            }
        }
    }
    
    int main() {
        while (scanf("%d", &N), N) {
            int a, b;
            char s[50];
            memset(G, 0, sizeof (G));
            while(cin >> a >> b, a | b) {
                cin >> s;
                int len = strlen(s);
                for (int i = 0; i < len; ++i) {
                    G[a][b]    |= 1 << s[i]-'a';
                }
            }
            floyd();
            while (cin >> a >> b, a | b) {
                if (G[a][b] == 0) {
                    putchar('-');
                } else {
                    for (int i = 0; i < 26; ++i) {
                        if (G[a][b] & (1 << i))    {
                            putchar('a'+i);    
                        }
                    }
                }
                puts("");
            }
            puts("");
        }
        return 0;
    }
  • 相关阅读:
    spring无法接收上传文件
    springcloud feign增加熔断器Hystrix
    mybatis调用存储过程(@Select方式)
    spring在注解标注的方法上加切面
    java注解Annotation
    java包装类
    JZ-C-43
    JZ-C-42-Plus
    JZ-C-42
    JZ-C-41-Plus
  • 原文地址:https://www.cnblogs.com/Lyush/p/2951936.html
Copyright © 2011-2022 走看看