• CodeForces 781D Axel and Marston in Bitland DP


    题意:

    有一个(n)个点(m)条边的无向图,边有两种类型,分别用(0)(1)标识
    因此图中的任意一条路径都对应一个(01)字符串
    定义一个无限长的字符串(s)
    开始令(s'=0),然后将(s')的反串(ar{s'})拼到后面得到(s' ar{s'}),如此反复最终得到(s)
    求从起点出发,在串(s)上走最多能走多少步

    分析:

    (arrive(i,t,u))表示从点(u)出发一共走了(2^i)步所能到达的点的集合,其中(t=0)表示在(s)上走,(t=1)表示在串(ar{s})上走
    假设在(s)上有个(u o v)长为(2^i)的路径,在(ar s)上有个(v o w)长为(2^i)的路径,那么拼起来在(s)上就有一条(u o w)长为(2^{i+1})的路径
    所以(arrive(i+1,t,u)=igcuplimits_{v in arrive(i,t,u)} arrive(i,1-t,v))

    再令(go(i, t, u))表示第(i)轮迭代后,从点(u)出发在串(s)(ar s)上最多走多少步
    如果(v in arrive(i,t,u)),那么就可以用(2^i + arrive(i,1-t,v))去更新(go(i+1,t,u)),相当于把两段路拼起来

    #include <cstdio>
    #include <bitset>
    using namespace std;
    
    const int maxn = 500;
    const int maxlog = 61;
    typedef long long LL;
    
    LL go[maxlog][2][maxn];
    bitset<maxn> arrive[maxlog][2][maxn];
    
    void max(LL& a, LL b) { if(b > a) a = b; }
    
    int main()
    {
        int n, m; scanf("%d%d", &n, &m);
        while(m--) {
            int u, v, t; scanf("%d%d%d", &u, &v, &t);
            u--; v--;
            go[0][t][u] = 1;
            arrive[0][t][u][v] = 1;
        }
    
        for(int i = 0; i + 1 < maxlog; i++) {
            for(int t = 0; t < 2; t++) {
                for(int u = 0; u < n; u++) {
                    go[i+1][t][u] = go[i][t][u];
                    for(int v = 0; v < n; v++) if(arrive[i][t][u][v]) {
                        arrive[i+1][t][u] |= arrive[i][t^1][v];
                        max(go[i+1][t][u], (1LL << i) + go[i][t^1][v]);
                    }
                }
            }
        }
    
        const LL limit = 1000000000000000000LL;
        LL& ans = go[maxlog - 1][0][0];
        if(ans > limit) puts("-1");
        else printf("%lld
    ", ans);
    
        return 0;
    }
    
  • 相关阅读:
    使用xca生成SSL证书
    在 Apache error_log 中看到多个信息,提示 RSA server certificate CommonName (CN) 与服务器名不匹配(转)
    SSL/TLS 高强度加密: 常见问题解答
    JAVA 集合操作总结
    VUE 微信开发
    实战 ant design pro 中的坑
    Spring boot 配置 mybatis xml和动态SQL 分页配置
    VUE打包上线优化
    VUE中如何优雅的动态绑定长按事件
    用C自撸apache简易模块,搭建图片处理服务器。
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/6511839.html
Copyright © 2020-2023  润新知