题意:

有一个\(n\)个点\(m\)条边的无向图,边有两种类型,分别用\(0\)和\(1\)标识

因此图中的任意一条路径都对应一个\(01\)字符串

定义一个无限长的字符串\(s\):

开始令\(s'=0\),然后将\(s'\)的反串\(\bar{s'}\)拼到后面得到\(s' \bar{s'}\),如此反复最终得到\(s\)

求从起点出发,在串\(s\)上走最多能走多少步

分析:

令\(arrive(i,t,u)\)表示从点\(u\)出发一共走了\(2^i\)步所能到达的点的集合,其中\(t=0\)表示在\(s\)上走,\(t=1\)表示在串\(\bar{s}\)上走

假设在\(s\)上有个\(u \to v\)长为\(2^i\)的路径,在\(\bar s\)上有个\(v \to w\)长为\(2^i\)的路径,那么拼起来在\(s\)上就有一条\(u \to w\)长为\(2^{i+1}\)的路径

所以\(arrive(i+1,t,u)=\bigcup\limits_{v \in arrive(i,t,u)} arrive(i,1-t,v)\)

再令\(go(i, t, u)\)表示第\(i\)轮迭代后,从点\(u\)出发在串\(s\)或\(\bar 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\n", ans); return 0;
}

CodeForces 781D Axel and Marston in Bitland DP的更多相关文章

  1. Codeforces 781D Axel and Marston in Bitland

    题目链接:http://codeforces.com/contest/781/problem/D ${F[i][j][k][0,1]}$表示是否存在从${i-->j}$的路径走了${2^{k}} ...

  2. Codeforces 781D Axel and Marston in Bitland 矩阵 bitset

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF781D.html 题目传送门 - CF781D 题意 有一个 n 个点的图,有 m 条有向边,边有两种类型: ...

  3. CF781D Axel and Marston in Bitland [倍增 矩阵乘法 bitset]

    Axel and Marston in Bitland 好开心第一次补$F$题虽然是$Div.2$ 题意: 一个有向图,每条边是$0$或$1$,要求按如下规则构造一个序列然后走: 第一个是$0$,每次 ...

  4. Axel and Marston in Bitland CodeForces - 782F (bitset优化)

    题目链接 $dp[0/1][i][x][y]$表示起始边为0/1, 走$2^i$ 步, 是否能从$x$走到$y$ 则有转移方程 $dp[z][i][x][y]\mid=dp[z][i-1][x][k] ...

  5. codeforces781D Axel and Marston in Bitland

    题目链接:codeforces781D 正解:$bitset$+状压$DP$ 解题报告: 考虑用$f[t][0.1][i][j]$表示从$i$出发走了$2^t$步之后走到了$j$,且第一步是走的$0$ ...

  6. Codeforces 219D. Choosing Capital for Treeland (树dp)

    题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:10240000 ...

  7. [CodeForces - 1272D] Remove One Element 【线性dp】

    [CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...

  8. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  9. codeforces 425C Sereja and Two Sequences(DP)

    题意读了好久才读懂....不知道怎么翻译好~~请自便~~~ http://codeforces.com/problemset/problem/425/C 看懂之后纠结好久...不会做...仍然是看题解 ...

随机推荐

  1. form表单上传域(type="file")的使用----上传文件

    一,单个文件的上传 1.html/jsp页面 <%@ page language="java" contentType="text/html; charset=UT ...

  2. redis---安全设置

    redis的安全性是通过设置口令来实现的. 首先打开redis的配置文件,我的是在/etc/redis/redis.conf,个人的路径可能会有不同,可以自行查找. 打开redis.conf文件以后, ...

  3. 【extjs6学习笔记】1.11 初始: config

    Ext JS有一个名为config的功能. 该配置允许您使用默认值声明公共属性,这些属性将被其他类成员完全封装. 通过config声明的属性将自动获取get()和set()方法,如果类没有定义这些方法 ...

  4. 【MFC】将当前的日期转化为1970年开始的秒计数

    CTime time1 = CTime::GetCurrentTime(); int nTSeconds = time1.GetTime(); CTime time2(,,,,,); nTSecond ...

  5. ffmpeg —— 添加水印

    1.添加水印——movie过滤器: ffmpeg -i inputfile -vf  "movie=masklogo,scale= 60: 30[watermask]; [in] [wate ...

  6. SAP成都研究院C4C光明左使:SAP Cloud for Customer 使用SAP UI5的独特之处

    大家好,今天的文章来自我的同事,Yang Joey. 2017年7月,SAP成都研究院C4C开发团队刚刚建立.某个周一早晨的Scrum meeting,新出现一位眉清目秀的小伙子,向大家自我介绍:&q ...

  7. 进程加载与segment

    elf文件是一组结构体和数据的组合. elf文件是一种文件格式,这种格式定义了进程加载器如何读取elf文件的内容. elf文件的程序头或者segment对如何加载(读取)做了说明.

  8. Dropout & Maxout

    [ML] My Journal from Neural Network to Deep Learning: A Brief Introduction to Deep Learning. Part. E ...

  9. 多线程:InterlockedIncrement

    1.InterlockedIncrement保护多线程中操作的整数. #include <stdio.h> #include <windows.h> volatile long ...

  10. CVE-2018-4878

    0x00前言 该漏洞影响 Flash Player 版本28.0.0.137以及之前的所有版本 0x01 poc Poc 这里只列出关键代码 public function triggeruaf() ...