题意 题目链接 Sol 设\(f[i][j]\)表示前\(i\)个位置中,以\(j\)为结尾的方案数. 转移的时候判断一下\(j\)是否和当前位置相同 然后发现可以用矩阵优化,可以分别求出前缀积和逆矩阵的前缀积(这题的逆矩阵炒鸡好求) 这样就可以\(n*10^3\) 发现相邻两个矩阵只有一行不同,那么其他的可以直接copy. 就可以做到\(n*10^2\)了. #include<bits/stdc++.h> #define Pair pair<int, int> #define M…
#6074. 「2017 山东一轮集训 Day6」子序列 链接 分析: 首先设f[i][j]为到第i个点,结尾字符是j的方案数,这个j一定是从i往前走,第一个出现的j,因为这个j可以代替掉前面所有j.于是有转移方程: $$ f_{i,j}= \begin{cases} f_{i-1,j}&,j\neq S_i\\ \sum_{k=1}^{m+1}f_{i-1,k}&,j=S_i \end{cases} $$ 表示如果当前j不是s[i]的话,最靠后的结尾的j还是那个位置,从i-1转移即可,否…
/* 找出了一个dp式子 是否能够倍增优化 我推的矩阵不太一样 是 1 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 2 求得逆矩阵大概就是 1 0 0 0 0 0 2 0 0 1 0 0 1 0 0 0 0 0 1 0 0 -1 0 0 0 */ #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include…
题目大意: 给定\(a, b, c\),求\(\sum \limits_{i = 1}^a \sum \limits_{j = 1}^b \sum \limits_{k = 1}^c [(i, j) = 1][(j, k) = 1][(i, k) = 1]\) $a, b, c \leq 5*10^4 $ 首先莫比乌斯反演 $Ans = \sum \limits_{i = 1}^a \sum \limits_{j = 1}^b \sum \limits_{k = 1}^c [(i, j) = 1…
题目描述: 给定一个 n个点m 条边的带权无向连通图 ,以及一个大小为k 的关键点集合S .有个人要从点s走到点t,现在可以对所有边加上一个非负整数a,问最大的a,使得加上a后,满足:s到t的最短路长度=s到t且只能经过S中的点的最短路长度. 题目分析: 暴力 记x为只经过关键点的最短路长度,其路径条数为n 记y为可经过任意点的最短路长度,其路径条数为m tip:路径条数意思这里指 覆盖最短路的边数 显然全部加上a之后最短路是不变的 也就是说我们要求这个东西 $$a*n+x=a*m+y$$ $$…
Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都有高度,对于编号为 $ i $ 座塔,其高度为 $ i $.对于一座塔,需要满足它与前面以及后面的塔的距离大于等于自身高度(不存在则没有限制).问有多少建造方案.答案对 $ m $ 取模. 塔不要求按编号为顺序建造. 输入格式 一行三个整数 $ n, l, m $. 输出格式 输出一个整数,代表答案…
Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\),设$ path(u,v) \(表示\) u$ 到 $v \(的路径,\)dist(u,v) \(表示\) u$ 到\(v\) 的距离,希望你求出 Input 第一行一个整数 \(type =0/1\)表示这个测试点的数据类型. 第二行两个整数 \(n,q\). 接下来$ n−1$ 行,每行三个整数…
Loj 6068. 「2017 山东一轮集训 Day4」棋盘 题目描述 给定一个 $ n \times n $ 的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置 $ (x, y),(u, v) $ 能互相攻击当前仅当满足以下两个条件: $ x = u $ 或 $ y = v $ 对于 $ (x, y) $ 与 $ (u, v) $ 之间的所有位置,均不是障碍. 现在有 $ q $ 个询问,每个询问给定 $ k_i $,要求从棋盘中选出 $ k_i $ 个空位置来放棋子,问最少互相能攻…
「2017 山东一轮集训 Day5」苹果树 \(n\leq 40\) 折半搜索+矩阵树定理. 没有想到折半搜索. 首先我们先枚举\(k\)个好点,我们让它们一定没有用的.要满足这个条件就要使它只能和坏点相连.其他的点没有要求.这样算出来了至少\(k\)个点没有用的生成树个数,我们要得到恰好\(k\)个点的生成树个数就简单容斥一下就好了. 然后我们要得到有\(k\)个点没有用的情况下的点集的方案数.看到\(40\)这个范围我们容易想到折半搜索. 然后就没了. 但是我没写容斥,写的枚举集合划分(被吊…
[LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么二分一个答案\(d\),把所有点挂到\(d+1\)次祖先上去,那么\(d+1\)次祖先的哈希值就是它原本的括号序列挖去了若干段,直接暴力哈希拼接起来就好了. #include<iostream> #include<cstdio> #include<cstdlib> #inc…