考虑向量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 <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i)
#define ll long longconst ll md=999911657;
ll n;struct matrix{ll x[305][305];void init(){memset(x,0,sizeof x);}matrix operator * (const matrix & a ) const{matrix ret;ret.init();F(i,1,n) F(j,1,n){F(k,1,n) ret.x[i][j]=ret.x[i][j]+x[i][k]*a.x[k][j];ret.x[i][j]%=md;}return ret;}void build(){init();F(i,1,n) x[i][i]=1;}void read(){F(i,1,n)F(j,1,n)scanf("%lld",&x[i][j]);}
}A,B,C,Ainv;ll qpow(ll a,ll b)
{ll ret=1;while (b){if (b&1) (ret*=a)%=md;(a*=a)%=md;b>>=1;}return ret;
}matrix gauss(matrix & x)
{matrix E; E.build();int i,j,k;for (i=1;i<=n;++i){for (k=i;k<=n;++k) if (x.x[k][i]) break;for (j=1;j<=n;++j) swap(x.x[i][j],x.x[k][j]),swap(E.x[i][j],E.x[k][j]);ll inv=qpow(x.x[i][i],md-2);for (j=1;j<=n;++j){x.x[i][j]=x.x[i][j]*inv%md;E.x[i][j]=E.x[i][j]*inv%md;}for (k=1;k<=n;++k)if (k!=i){ll tmp=(md-x.x[k][i]%md)%md;for (j=1;j<=n;++j){x.x[k][j]=(x.x[k][j]+x.x[i][j]*tmp)%md;E.x[k][j]=(E.x[k][j]+E.x[i][j]*tmp)%md;}}}return E;
}int map[305][305],vis[305],linker[305];bool dfs(int o)
{F(i,1,n)if (map[o][i]&&!vis[i]){vis[i]=1;if (!linker[i]||dfs(linker[i])){linker[i]=o;return true;}}return false;
}int dfs2(int o,int from)
{for (int i=1;i<=n;++i)if (map[o][i]&&!vis[i]){vis[i]=1;if (linker[i]==from||linker[i]>from&&dfs2(linker[i],from)){linker[i]=o;return true;}}return false;
}int main()
{scanf("%lld",&n);A.read();B.read();Ainv=gauss(A);C=B*Ainv;F(i,1,n) F(j,1,n) if (C.x[i][j]) map[j][i]=1;F(i,1,n){memset(vis,0,sizeof vis);if (!dfs(i)){printf("NIE\n");return 0;}}F(i,1,n){memset(vis,0,sizeof vis);dfs2(i,i);}printf("TAK\n");F(i,1,n)F(j,1,n)if (linker[j]==i)printf("%d\n",j);return 0;
}

  

转载于:https://www.cnblogs.com/SfailSth/p/6582098.html

BZOJ 3168 [Heoi2013]钙铁锌硒维生素 ——矩阵乘法 矩阵求逆相关推荐

  1. BZOJ 3168: [Heoi2013]钙铁锌硒维生素 [线性基 Hungary 矩阵求逆]

    3168: [Heoi2013]钙铁锌硒维生素 题意:给一个线性无关组A,再给一个B,要为A中每个向量在B中选一个可以代替的向量,替换后仍然线性无关.判断可行和求字典序最小的解 PoPoQQQ orz ...

  2. [矩阵求逆+二分图匹配]BZOJ 3168 [Heoi2013]钙铁锌硒维生素

    题目梗概 给出两个\(n*n\)的矩阵\(A,B\),将\(A,B\)中的向量进行匹配,使得\(A\)的任意向量被匹配的向量替换后,\(A\)仍线性无关,求字典序最小解,保证初始时\(A\)线性无关. ...

  3. BZOJ 3168: [Heoi2013]钙铁锌硒维生素

    对着网上下的数据拍发现过不去,交上去就1A了...... 看discuss才发现标程是错的....... 根据14年的论文,A为n维向量的一组基,B中任意行向量属于Span(A),于是可以得出系数矩阵 ...

  4. 【BZOJ】3168: [Heoi2013]钙铁锌硒维生素

    题解 Ca Fe Zn Se 显然我们既然初始矩阵就能通过线性变换变成单位矩阵,则该矩阵一定有逆 没有逆输出NIE 而且因为这些向量两两正交,则表示一个向量的时候表示方法唯一 那么我们求一个逆可以求出 ...

  5. 【BZOJ3168】[Heoi2013]钙铁锌硒维生素 高斯消元求矩阵的逆+匈牙利算法

    [BZOJ3168][Heoi2013]钙铁锌硒维生素 Description 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加宇宙比赛的饮食.众所周知,前往宇宙的某个星球,通常要花 ...

  6. 洛谷 P4100 [HEOI2013]钙铁锌硒维生素 解题报告

    P4100 [HEOI2013]钙铁锌硒维生素 题目描述 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加 宇宙比赛的饮食. 众所周知,前往宇宙的某个星球,通常要花费好长好长的时间, ...

  7. Bzoj3168 [Heoi2013]钙铁锌硒维生素

    Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 466  Solved: 151 Description 银河队选手名单出来了!小林,作为特聘的营养师 ...

  8. [BZOJ]4180: 字符串计数 SAM+矩阵乘法+二分

    Description SD有一名神犇叫做Oxer,他觉得字符串的题目都太水了,于是便出了一道题来虐蒟蒻yts1999. 他给出了一个字符串T,字符串T中有且仅有4种字符 'A', 'B', 'C', ...

  9. BZOJ 3168 Luogu P4100 [HEOI2013]钙铁锌硒维生素 (矩阵求逆、二分图匹配)

    线性代数+图论好题. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3168 (luogu) https://www.lu ...

最新文章

  1. 外币评估时,错误勾选”资产负债表准备评估”的处理
  2. OD的 CC断点,内存访问断点,硬件断点 解析
  3. jsencrypt加密结果false(网罗答案) - 分析篇
  4. vSphere 5.0热添加
  5. 《统一沟通-微软-实战》-3-部署-Exchange 2010-2-自定义安装
  6. LA 4254 贪心
  7. Tensor 和Numpy转换
  8. Python 项目实践三(Web应用程序)第一篇
  9. MAC安装淘宝镜像NPM
  10. 【Fortran】CUDA+PGI Fortran安装教程
  11. Java中使用Google zxing生成二维码
  12. 服务器损坏文件怎么办,“该文件可能已损坏或者文件所在的服务器没有响应或者该文件是只读的”怎么解决?...
  13. python中tan函数如何表示_Python入门之三角函数tan()函数实例详解
  14. C语言基础语法(初学者必看)
  15. 改进的LCS算法的应用
  16. 程序员干到30岁,真的只能转行了么?
  17. 12V铅酸电池充放电保护板
  18. 如何桥接两个无线路由器来扩展WIFI覆盖范围?
  19. pytorch dali 加速 dali支持的数据处理列表,mxnet tensorflow caff读取数据转换 pytorch训练
  20. 如何清除搜狗输入法自带的“搜狐新闻”?

热门文章

  1. 第6章 项目整体管理
  2. arm-2d库详细介绍
  3. 127.0.0.1 zxt.php_php单文件版在线代码编辑器使用方法
  4. LVGL8.2学习笔记
  5. centos7 安装gitea使用
  6. [微云助手/微小云怎么用]如何设置群组群发
  7. 二级考试c语言中 星号与字母 题型总结,计算机等级C语言上机考试编程题分类总结.doc...
  8. lua深拷贝一个table
  9. 结构体变量的两种初始化方式
  10. 阿里巴巴FastJson整理(20分钟阅读)