题意: 给一个$n$点$m$边的连通图 每个边有一个权值$d$ 当且仅当当前走过的步数$\ge d$时 才可以走这条边 问从节点$1$到节点$n$的最短路 好神的一道题 直接写做法喽 首先我们对边按$d_i$由小到大排序 设$f_i$表示加上$1\sim i-1$的所有边走$d_i$次后各点间的联通情况 $G$表示只连$1\sim i-1$的边的邻接矩阵 这些我们可以用一个$01$邻接矩阵来存储 则有 $f_i=f_{i-1}*G^{d_i-d_{i-1}}$ 这很明显是一个矩阵快速幂的过程 之…
题目链接  Flights for Regular Customers 首先按照$d$的大小升序排序 然后分成$m$个时刻,每条路径一次处理过来. $can[i][j]$表示当前时刻$i$能否走到$j$ $can$通过上一条路径后的$can$和当前的可行路径矩阵的$d$次幂得到. 这由$floyd$求解即可.考虑到$d$很大,用矩阵快速幂加速. TLE on test 10 矩阵乘法的时候用$bitset$优化. 更新答案的时候,我们枚举每个点. 若第$1$个点可以走到第$i$个点,则更新答案.…
题目链接 http://codeforces.com/contest/576/problem/D 题解 把边按\(t_i\)从小到大排序后枚举\(i\), 求出按前\((i-1)\)条边走\(t_i\)步能到达的点的集合,以它们为起点求\(n\)号点的最短路. 前者等于前\((i-2)\)条边走\(t_{i-1}\)步能到达的点集乘上前\((i-1)\)条边邻接矩阵的\((t_i-t_{i-1})\)次幂. 因为只关心是否存在,故可以使用bitset优化. 时间复杂度\(O(mn^3+\frac…
题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,你初始在 \(1\) 号点,边上有边权 \(c_i\) 表示只有当你经过至少 \(c_i\) 条边的时候你才能经过第 \(i\) 条边. 求从 \(1\) 号点开始最少走过多少条边才能到达 \(n\) 号点. \(n,m \leq 150,c_i\leq 10^9\) 注意到题目中 \(c_i\) 的数据范围可以达到 \(10^9\),我们显然不能一步步枚举可达的位置. 但是 \(m\) 的数据范围很小,说明转移矩阵最多改变…
这破题调了我一天...错了一大堆细节T T 首先显然可以将边权先排序,然后逐个加进图中. 加进图后,倍增跑跑看能不能到达n,不能的话加新的边继续跑. 倍增的时候要预处理出h[i]表示转移矩阵的2^0~i的或和,转移是h[i]=h[i-1]*h[i-1]. 注意两个矩阵包含0~i和0~j相乘的时候,得到的矩阵是0~i*j的,而两个矩阵包含0~i和0~j或起来的时候,得到的矩阵是j~i+j的. 倍增的时候因为必须答案单调,所以当前的值必须或上之前的值. #include<iostream> #in…
题意:二维平面上右一点集$S$,共$n$个元素,开始位于平面上任意点$P$,$P$不一定属于$S$,每次操作为选一条至少包含$S$中两个元素和当前位置$P$的直线,每条直线选取概率相同,同一直线上每个点$Q \in S$ 选取概率相同,$Q$次询问 包含两个元素$t,m$ 即点$P$到$t$共操作$m$次的最大概率 打了场$CF$ 结果$D$题死活调不出来 只能一大早来补题了 可以想到记录$f[i][j][k]$表示从点$i$到点$j$走$k$步的概率 这个过程我们可以通过记录$2^x$的矩阵来…
%%%cxhscst2's blog Codeforces 576D Flights for Regular Customers(矩阵加速DP) 代码非常优美 + 简洁,学习到了 Code: #include <bits/stdc++.h> #define N 160 #define inf 0x3f3f3f3f #define maxn 1000000 #define setIO(s) freopen(s".in","r",stdin) using n…
In the country there are exactly n cities numbered with positive integers from 1 to n. In each city there is an airport is located. Also, there is the only one airline, which makes m flights. Unfortunately, to use them, you need to be a regular custo…
https://codeforces.com/contest/1106/problem/F 题意 数列公式为\(f_i=(f^{b_1}_{i-1}*f^{b_2}_{i-2}*...*f^{b_k}_{i-k})\)mod\(P\),给出\(f_{1}...f_{k-1}\)和\(f_{n}\),求\(f_{k}\),其中\(P\)等于998244353 题解 3是998244353的离散对数,所以\(f^{b_1}_{i-1} \equiv 3^{h_i*b_1}(modP)\),怎么求离散…
传送门:https://codeforces.com/contest/691/problem/E 题意:给定长度为n的序列,从序列中选择k个数(可以重复选择),使得得到的排列满足xi与xi+1异或的二进制中1的个数是3的倍数.问长度为k的满足条件的序列有多少种? 题解:dp状态定义为,在前i个数中以aj为结尾的方案数量 则转移为 因为是求和的转移,可以用矩阵快速幂将O(n)的求和加速为log级别 接下来的问题就是然后填系数了,因为要累加,所以只要时,我们将矩阵的第i行第j列的系数填为1即可 目的…