线性代数+图论好题. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3168 (luogu) https://www.luogu.org/problemnew/show/P4100 题解: 首先有一个结论是,设矩阵\(C\)满足\(CA=B\), 则\(A\)的第\(i\)行可以被\(B\)的第\(j\)行来替代当且仅当\(C_{j,i}\ne 0\). 这个的话就是一定要记住,矩阵初等变换的实质就是给它左乘一个初等矩…
P4100 [HEOI2013]钙铁锌硒维生素 题目描述 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加 宇宙比赛的饮食. 众所周知,前往宇宙的某个星球,通常要花费好长好长的时间,人体情况在 这之间会发生变化,因此,需要根据每天的情况搭配伙食,来保证营养. 小林把人体需要的营养分成了 \(n\) 种,这些营养包括但不限于铁,钙.他准备 了 \(2\) 套厨师机器人,一套厨师机器人有 \(n\) 个,每个厨师机器人只会做一道菜,这道菜一斤能提供第 \(i\) 种营养 \(x_i…
题目大意:给定一个n∗n的满秩矩阵A和一个n∗n的矩阵B.求一个字典序最小的1...n的排列a满足将随意一个Ai换成Bai后矩阵A仍然满秩 我们考虑建立一个二分图.假设Ai能换成Bj.就在i−>j之间连接一条边 那么这个图怎么建呢? 考虑一个行向量Bi,我们在A中找到最小的行向量集合满足Bi能够被这些行向量线性表出,那么显然Bi仅仅能替换这些行向量 我们能够设矩阵C满足C∗A=B,那么C=B∗A−1 Ci,j≠0表示Bi的线性表出须要Aj,因此CT就是这个二分图的邻接矩阵 如今我们有了一个二分图…
设第一套为A,第二套为B 先对于每个B[i]判断他能否替代A[j],即B[i]与其他的A线性无关 设$B[i]=\sum\limits_{k}{c[k]*A[k]}$,那么只要看c[j]是否等于零即可,如果c[j]=0,就意味着可以用A[j]以外的线性表达出B[i],所以不能B[i]替换A[j],否则可以 于是高斯消元求出c矩阵,问题就转化成了求二分图的最小字典序匹配 先跑一遍匈牙利判下是否无解,然后以它为基准解再贪心地求一遍答案 具体地说,你做到第i个的时候,前i-1都要固定住,其他的和普通匈…
3168: [Heoi2013]钙铁锌硒维生素 题意:给一个线性无关组A,再给一个B,要为A中每个向量在B中选一个可以代替的向量,替换后仍然线性无关.判断可行和求字典序最小的解 PoPoQQQ orz 显然是一个二分图匹配的模型 A是一个线性基,用它把B中每个向量表示出来,那么\(B_i\)可以替换\(A_j\)当且仅当表示\(B_i\)用到了\(A_j\) 可是A并不是每一位独立,怎么求表示啊? A和B可以看成两个矩阵(横向量组) \(C*A=B \rightarrow C=B*A^{-1}\…
[BZOJ3168][Heoi2013]钙铁锌硒维生素 Description 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加宇宙比赛的饮食.众所周知,前往宇宙的某个星球,通常要花费好长好长的时间,人体情况在这之间会发生变化,因此,需要根据每天的情况搭配伙食,来保证营养.小林把人体需要的营养分成了n种,这些营养包括但不限于铁,钙.他准备了2套厨师机器人,一套厨师机器人有n个,每个厨师机器人只会做一道菜,这道菜一斤能提供第i种营养xi微克.想要吃这道菜的时候,只要输入一个数,就…
题解 Ca Fe Zn Se 显然我们既然初始矩阵就能通过线性变换变成单位矩阵,则该矩阵一定有逆 没有逆输出NIE 而且因为这些向量两两正交,则表示一个向量的时候表示方法唯一 那么我们求一个逆可以求出这个矩阵消成单位矩阵的线性表示,再拿第二个矩阵和逆矩阵相乘可以得到第二个矩阵每个行向量用第一个矩阵的行向量唯一的表示方法 如果第二套的第k个行向量的表示里第一行h个行向量系数不为0,则h可以被k替代 建图二分图匹配,先求一个匹配出来,然后对于每个点从前往后固定匹配看看能不能使得靠前的更小 说的很高端…
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3168 题解 首先,我们需要求出对于任意的 \(i, j(1 \leq i, j \leq n)\),第二套中的第 \(j\) 个机器人是否可以替换第一套中的第 \(i\) 个机器人. 将第 \(i\) 个机器人提供的第 \(j\) 种营养的量记为 \(a_{i, j}\),我们可以得到一个 \(n \times n\) 的矩阵 \(A\).那么,整套机器人能搭配出任何营养需求等价于将矩…
考虑向量ai能否换成向量bj 首先ai都是线性无关的,然后可以a线性表出bj c1*a1+c2*a2+...=bj 然后移项,得 c1/ci*a1+...-1/ci*bj+...=ai 所以当ci不为0得时候是可以替换的, 所以C*A=B 若c[i][j]!=0 那么ai可以换成bj 然后求逆计算. 关于字典序最小得最大匹配.在做完最大匹配之后,从前往后找不影响前面得交错路进行修改即可. #include <cstdio> #include <cstring> #include &…
设$A^TC=B^T$,这样$C_{ij}$表示$B_j$的线性表出需要$A_i$,那么$B_j$可以替换$A_i$,根据$C=(A^T)^{-1}B^T$求出$C$.要求字典序最小完美匹配,先求任意完美匹配,然后从小到大尽可能把匹配改小,用类似匈牙利的方法找"增广路".注意倒着跑是不行的,因为小的有可能影响到较小的,除非有其他限制. #include<bits/stdc++.h> using namespace std; typedef long long ll; con…