zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    CSS 的层叠上下文是什么
    BFC原理解析
    从 (a==1&&a==2&&a==3) 成立中看javascript的隐式类型转换
    IIFE中的函数是函数表达式,而不是函数声明
    Virtual DOM 真的比操作原生 DOM 快吗?
    解决for循环里获取到的索引是最后一个的问题
    bzoj4161: Shlw loves matrixI
    [NOI2007]生成树计数环形版
    bzoj1494: [NOI2007]生成树计数
    bzoj1964: hull 三维凸包
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/6511839.html
Copyright © 2011-2022 走看看