zoukankan      html  css  js  c++  java
  • b_vj_Fiber Network(floyd思想+状态压缩)

    Internet服务供应商想知道从站点A传送数据到站点B哪谢公司提供了必要的连接(就是在链路中都出现过的公司)。

    思路:f[i][j]的值表示从结点i到j经过了那些必要的公司,由于最多只有26个公司,故可将状态进行压缩

    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <cstdlib>
    using namespace std;
    const int N=205;
    int n,f[N][N];
    char s[N];
    void floyd() {
        for (int k=1; k<=n; k++)
        for (int i=1; i<=n; i++)
        for (int j=1; j<=n; j++) {
            f[i][j]|=f[i][k]&f[k][j];
        }
    }
    int main() {
        while (scanf("%d",&n), n) {
            int u,v;
            memset(f,0,sizeof f);
            while (scanf("%d%d",&u,&v), u) {
                scanf("%s",s);
                for (int i=0; i<strlen(s); i++)
                    f[u][v]|=(1<<(s[i]-'a'));
            }
            floyd();
            while (scanf("%d%d",&u,&v), u) {
                int st=f[u][v], c=0; //c表示st的第几位
                while (st) {
                    if (st&1) putchar(c+'a');
                    st>>=1, c++;
                }
                if (c==0) putchar('-');
                putchar('
    ');
            }
            putchar('
    ');
        }
        return 0;
    }
    
  • 相关阅读:
    nodejs内存溢出解决方法
    mongodb副本集与分片结合
    node加密
    守护进程,互斥锁,IPC,队列,生产者与消费者模型
    并发编程
    粘包问题
    socket编程
    xml模块
    网络编程
    异常处理
  • 原文地址:https://www.cnblogs.com/wdt1/p/13938456.html
Copyright © 2011-2022 走看看