In some countries building highways takes a lot of time... Maybe that's because there are many possiblities to construct a network of highways and engineers can't make up their minds which one to choose. Suppose we have a list of cities that can be c…
题目链接 BZOJ4031 题解 第一眼:这不裸的矩阵树定理么 第二眼:这个模\(10^9\)是什么鬼嘛QAQ 想尝试递归求行列式,发现这是\(O(n!)\)的.. 想上高斯消元,却又处理不了逆元这个东西.. 无奈去翻题解,,, 发现可以用类似辗转相除法去消,而避免除法,,, 这样子依旧是每次一行减去另一行乘一个数,行列式不变 orz #include<algorithm> #include<iostream> #include<cstring> #include<…
传送门:https://www.luogu.org/problemnew/show/P3317 这道题的推导公式还是比较好理解的,但是由于这个矩阵是小数的,要注意高斯消元方法的使用: #include <algorithm> #include <iterator> #include <iostream> #include <cstring> #include <cstdlib> #include <iomanip> #include…
题目大意: 求最小生成树的数量 曾今的我感觉这题十分的不可做 然而今天看了看,好像是个类模板的题.... 我们十分容易知道,记能出现在最小生成树中的边的集合为\(S\) 那么,只要是\(S\)中的边构成的树,一定能构成最小生成树 我们只要预处理哪些可能在最小生成树中即可 打个树剖维护以下就可以了 太懒了,不想打太长,然后就拿并查集随便弄了弄 最后来个矩阵树就行了 \(31011\)不是一个质数,用辗转相除法来消元 复杂度\(O(n^3 \log n)\) #include <cstdio> #…
正题 题目链接:https://www.luogu.com.cn/problem/CF917D 题目大意 给出\(n\)个点的一棵树,对于每个\(k\)求有多少个\(n\)个点的树满足与给出的树恰好有\(k\)条边重合. 解题思路 矩阵树有一个统计所有树边权和的和用法,就是把变量变成一个形如\(wx+1\)的多项式,这样一次项系数的值就表示了固定选择一条边的\(w\)时其他边的方案数之和. 这题我们可以同理,对于在给出数上的边是\(x\),而其他就是\(1\).那么最后询问\(x^k\)的系数就…
qwq 这个题目真的是很好的一个题啊 qwq 其实一开始想这个题,肯定是无从下手. 首先,我们会发现,对于无向图的一个最小生成树来说,只有当存在一些边与内部的某些边权值相同的时候且能等效替代的时候,才会有多种最小生成树. 那我们不妨对于原图先随意求一个最小生成树,然后对于出现在最小生成树上的每个权值计算贡献. 我们每次删除所有该权值的边,然后把剩下的点能缩点的进行缩点(用并查集来维护) 然后,我们构造一个联通块的拉普拉斯矩阵.也就是说,加入所有的在图中的,权值为该值的边.然后我们只需要求能重新构…
给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成树的权值和. Solution 很容易想到,设 \(G_1\) 中每条边的权值,这条边在 \(G_2\) 中出现则权值为 \(1\),否则权值为 \(0\). 现在就真的是求所有生成树的边权和的权值和了. 然而标准的 Matrix-Tree Theorem 求的是生成树的边权积的和. 现在我们定义每…
题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\(P_i\)表示一回合扣\(i\)滴血的概率,为 \[P_i={{k\choose i}m^{k-i}\over (m+1)^k}\] 所以这个柿子啥意思? 我们可以把\(k\)次扣血看成一个长度为\(k\)的序列,每个序列有\(m+1\)种选择方法,于是总的选法就是\((m+1)^k\).我们要钦定…
题解看这里,主要想说一下以前没见过的变元矩阵树还有前几个题见到的几个小细节. 邻接矩阵是可以带权值的.求所有生成树边权和的时候我们有一个基尔霍夫矩阵,是度数矩阵减去邻接矩阵.而所谓变元矩阵树实际上就是把度数矩阵和邻接矩阵带权化,也就是度数矩阵变成该点连接的所有边的权值和,邻接矩阵变成边权矩阵,剩下的依然是求一个行列式.变元矩阵树求的是所有可能生成树的边权之积. 值得注意的点: 交换两行,行列式取反.在\(double\)存矩阵的时候可以最后取对角线乘积的绝对值,但如果答案要取膜就需要套上一个辗转…
矩阵树定理裸题 //#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(register int a = (b); a >= (c); -…
题目大意:有$n$个点和$m$条边(最多有$10$条边边权相同),求最小生成树个数 题解:对于所有最小生成树,每种边权的边数是一样的.于是就可以求出每种边权在最小生成树中的个数,枚举这种边的边集,求出对于这个边集可以的解(即没有一条边在同一联通块中),再把每种边的方案数乘起来即可. 卡点:无 C++ Code: #include <cstdio> #include <algorithm> using namespace std; const long long mod = 3101…
题目传送 前置知识:对于同一个图的所有最小生成树,权值相等的边的数量相同. 可以简单证明一下: 我们可以从kruskal的过程考虑.这个算法把所有边按权值大小从小到大排序,然后按顺序看每条边,只要加上这条边后不会形成连通块,就加上. 以上过程其实等价于先将所有权值等于第一条边的边都加进图中,然后一个个删边,使图中无环.设权值等于第一条边的边数为i,下次再将所有权值等于第i+1条边的边都加进图中...直至算过最后一条边,或图中刚好剩下了n-1条边(n为图的点的个数). 发现加完一批边后要删的边的个…
sro_ptx_orz qwq算是一个套路的记录 对于一个有向图来说 如果你要求一个外向生成树的话,那么如果存在一个\(u\rightarrow v\)的边 那么\(a[u][v]--,a[v][v]++\) 对应的去掉第\(i\)行和第\(i\)列的余子式,就是以\(i\)为根的生成树个数. 内向生成树也是同理.所有的反过来即可 #include<iostream> #include<cstdio> #include<algorithm> #include<cs…
题面 传送门 题解 不知道概率生成函数是什么的可以看看这篇文章,题解也在里面了 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i) #define go(u) for(int i=head[u],v=e[i].v;i;i=e[…
点此看题面 大致题意: 一个无向连通图,小\(Z\)从\(1\)号顶点出发,每次随机选择某条边走到下一个顶点,并将\(ans\)加上这条边的编号,走到\(N\)号顶点时结束.请你对边进行编号,使总分期望值最小. 一个贪心的思想 由于贪心的思想,我们肯定是给期望访问次数最大的边编号为\(1\),第二大的编号为\(2\),第三大的编号为\(3\),以此类推. 那么我们应该怎么求出边的期望呢? 由于边的期望可以由点的期望转化得来,因此只要求出了点的期望,就能求出边的期望. 那么怎么求出点的期望呢? 这…
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 不难看出题目讲的就是线性基 这种最小化权值的问题一般都是贪心的,就是按价值从低到高考虑每一个是否能选 据说贪心的证明得用拟阵我不会 据说这题是实数意义下的线性基我还是不会……据说得用高斯消元…… 所以直接上代码好了…… //minamoto #include<cstdio> #include<algorithm> #include<cmath> #define N 505 #define eps 1e-6 #defin…
题目描述 传送门 分析 首先判掉 \(INF\) 的情况 第一种情况就是不能从 \(s\) 走到 \(t\) 第二种情况就是从 \(s\) 出发走到了出度为 \(0\) 的点,这样就再也走不到 \(t\) 然后我们去考虑 \(60\) 分的做法 我们设 \(dp[u]\) 为当前在点 \(u\) 走到点 \(t\) 的期望步数 那么就有 \(dp[u]=\sum_{u->v}^v((dp[v]+1) \times \frac{1}{rd[u]})\) 移项之后就变成了 \(dp[u]-\sum_…
题面传送门 期望真 nm 有意思,所以蒟蒻又来颓期望辣 先特判掉 \(P_0=0\) 的情况,下面假设 \(P_0\ne 0\). 首先注意到我们每次将加特林对准一个人,如果这个人被毙掉了,那么相当于进入了 \(n-1\) 个人的状态,否则等价于每个人都向前移动了一个位置,原来第 \(k\) 个位置上的人挪到了第 \(k-1\) 个位置上,故我们考虑设 \(dp_{i,j}\) 表示在有 \(i\) 个人的状态下,第 \(j\) 个人成为唯一的幸存者的概率.考虑转移,这里不妨假设 \(j>2\)…
https://blog.csdn.net/zhaoruixiang1111/article/details/79185927 为了学一个矩阵树定理 从行列式开始学(就当提前学线代了.. 论文生成树的计数及其应用 矩阵数定理: 截图来自于上述论文 裸题. #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> using namespace std; ; ; double…
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3584  Solved: 1863[Submit][Status][Discuss] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. Input 第一行是一个整数,n.接…
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4846  Solved: 2525[Submit][Status][Discuss] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. Input 第一行是一个整数n(1<…
传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有$N \times M$的元.$N \times M$个方程的异或方程组(异或方程组就是所有位置都是$1$或$0$,最右边一列的答案需要通过异或互相消除的方程组,一般在$mod\,2$意义下产生). 理论上元和方程组数量一致的时候每一个元都是有唯一解的,但是在有解的情况下,其中一些方程是线性相关的,…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2466 [题目大意] 给定一棵树,每个节点有一盏指示灯和一个按钮.如果节点的按扭被按了, 那么该节点的灯会从熄灭变为点亮(当按之前是熄灭的),或者从点亮到熄灭 并且该节点的直接邻居也发生同样的变化.开始的时候,所有的指示灯都是熄灭的. 请编程计算最少要按多少次按钮,才能让所有节点的指示灯变为点亮状态. [题解] 高斯消元枚举自由变元回代. [代码] #include <cstdio>…
BZOJ1013 JSOI2008 球形空间产生器sphere Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. Input 第一行是一个整数n(1<=N=10).接下来的n+1行,每行有n个实数,表示球面上一点的n维坐标.每一个实数精确到小数点后6位,且其绝对值都不超过20000. Output 有且只有一行,依次给出球心的…
\(\mathcal{Description}\)   link.   给定带权简单无向图,求其最小生成树个数.   顶点数 \(n\le10^2\),边数 \(m\le10^3\),相同边权的边数不超过 \(10\). \(\mathcal{Solution}\)   先说一个引理:对于一个图的任意两棵最小生成树,其边权集合相等.   简单证明一下,设有两个最小生成树的边权集合 \(\{\dots,a,b,\dots\},\{\dots,c,d,\cdots\}\)(省略号处相等,不降排列).…
洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Lazy-Tag 每次加入一个新的点就是修改一个节点 总区间长为操作次数m (假设所有操作都为添加一个节点) 因此题目就简单多了 代码 #include<iostream> using namespace std; #define ll long long #define Max 200000 #def…
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1013 n维空间,给出球上n+1个点的n维坐标,求球心坐标. 提示:给出两个定义:1. 球心:到球面上任意一点距离都相等的点.2. 距离:设两个n为空间上的点A, B 的坐标为(a1, a2, …, an), (b1, b2, …, bn),则AB的距离定义为:dist = sqrt( (a1-b1)^2 + (a2-b2)^2 + … + (an-bn)^2 ) 分析 对于前n个点,第i个点…
蛮不错的一道题,遗憾就遗憾在数据范围会导致暴力轻松跑过. 最小生成树的两个性质: 不同的最小生成树,相同权值使用的边数一定相同. 不同的最小生成树,将其都去掉同一个权值的所有边,其连通性一致. 这样我们随便跑一个\(MST\),就可以知道所有\(MST\)边的构造情况.由于性质二,我们可以考虑枚举每一种权值的所有边,保留所有非此权值的树边,看可以连出来多少种不同的最小生成树.也就是按照权值构造最小生成树,这个过程满足乘法原理. #include <bits/stdc++.h> using na…
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作. 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾. 限制:n是整数(可能为负数)并且在长整范围内. 注意:初始时数列是空的,没有一个数. 输入输出格式 输入格式: 第一行两个整数,M…
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:LLL不超过当前数列的长度.(L>0)(L > 0)(L>0) 2. 插入操作. 语法:A n 功能:将nnn加上ttt,其中ttt是最近一次查询操作的答案(如果还未执行过查询操作,则t=0t=0t=0),并将所得结果对一个固定的常数DDD取模,将所得答案插入到数列的末尾. 限制:nnn是整数(可能为负数)并且在长整范围内. 注意…