设$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;
const int N=300;
typedef ll arr[N][N];
arr s,t,e,c;
const int p=1e9+9;
int n,z[N],f[N];
ll wop(ll t,ll k){
for(ll s=1;;k>>=1){
if(k&1)s=s*t%p;
if(k<2)return s;
t=t*t%p;
}
}
bool dfs1(int i){
for(int j=0;j<n;++j)
if(c[i][j]&&!z[j]++&&(!~f[j]||dfs1(f[j])))
return&(f[j]=i);
return 0;
}
bool dfs2(int i,int k){
for(int j=0;j<n;++j)
if(c[i][j]&&!z[j]++&&(f[j]==k||f[j]>k&&dfs2(f[j],k)))
return&(f[j]=i);
return 0;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
scanf("%lld",s[j]+i);
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
scanf("%lld",t[j]+i);
for(int i=0;i<n;++i)
e[i][i]=1;
for(int i=0;i<n;++i){
for(int j=i;j<n;++j)
if(s[j][i]){
for(int k=0;k<n;++k){
swap(s[j][k],s[i][k]);
swap(e[j][k],e[i][k]);
}
break;
}
ll v=wop(s[i][i],p-2);
for(int k=0;k<n;++k){
(s[i][k]*=v)%=p;
(e[i][k]*=v)%=p;
}
for(int j=0;j<n;++j){
if(j==i)continue;
v=(p-s[j][i])%p;
for(int k=0;k<n;++k){
(s[j][k]+=v*s[i][k])%=p;
(e[j][k]+=v*e[i][k])%=p;
}
}
}
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
for(int k=0;k<n;++k)
(c[i][k]+=e[i][j]*t[j][k])%=p;
memset(f,-1,sizeof f);
for(int i=0;i<n;++i){
memset(z,0,sizeof z);
if(!dfs1(i))
return!~puts("NIE");
}
for(int i=0;i<n;++i){
memset(z,0,sizeof z);
dfs2(i,i);
}
puts("TAK");
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
if(f[j]==i)printf("%d\n",j+1);
}

BZOJ3168: [Heoi2013]钙铁锌硒维生素的更多相关文章

  1. BZOJ3168. [HEOI2013]钙铁锌硒维生素(线性代数+二分图匹配)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3168 题解 首先,我们需要求出对于任意的 \(i, j(1 \leq i, j \leq ...

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

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

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

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

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

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

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

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

  6. BZOJ 3168 Heoi2013 钙铁锌硒维生素 矩阵求逆+匈牙利算法

    题目大意:给定一个n∗n的满秩矩阵A和一个n∗n的矩阵B.求一个字典序最小的1...n的排列a满足将随意一个Ai换成Bai后矩阵A仍然满秩 我们考虑建立一个二分图.假设Ai能换成Bj.就在i−> ...

  7. BZOJ 3168 [Heoi2013]钙铁锌硒维生素 ——矩阵乘法 矩阵求逆

    考虑向量ai能否换成向量bj 首先ai都是线性无关的,然后可以a线性表出bj c1*a1+c2*a2+...=bj 然后移项,得 c1/ci*a1+...-1/ci*bj+...=ai 所以当ci不为 ...

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

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

  9. bzoj3168 钙铁锌硒维生素 (矩阵求逆+二分图最小字典序匹配)

    设第一套为A,第二套为B 先对于每个B[i]判断他能否替代A[j],即B[i]与其他的A线性无关 设$B[i]=\sum\limits_{k}{c[k]*A[k]}$,那么只要看c[j]是否等于零即可 ...

随机推荐

  1. RedHat Linux RHEL6配置本地YUM源

    YUM是Yellow dog Updater Modified的简称,起初是由yellow dog这一发行版的开发者Terra Soft研发,用python写成,那时还叫做yup(yellow dog ...

  2. SQL SERVER 2014 Agent服务异常停止案例

    生产环境一数据库服务器(SQL Server 2014)的Agent服务突然停掉了,检查了错误日志,发现在"SQL Server Agent"里面没有"SQLServer ...

  3. MySQL优化概述

    一. MySQL优化要点 MySQL优化是一门复杂的综合性技术,主要包括: 1 表的设计合理化(符合 3NF,必要时允许数据冗余) 2.1 SQL语句优化(以查询为主) 2.2 适当添加索引(主键索引 ...

  4. 使用 python 实现 wc 命令程序的基本功能

    这里使用了 python 的基本代码实现了 Linux 系统下 wc 命令程序的基本功能. #!/usr/bin/env python #encoding: utf-8 # Author: liwei ...

  5. memcache+magent的高可用

    memcache+magent的高可用 一.安装步骤: 1.编译安装libevent: wget http://monkey.org/~provos/libevent-1.4.9-stable.tar ...

  6. android 项目中出现红色感叹号的解决方法

    问题原因]:工程中classpath中指向的包路径错误 [解决办法]:右键项目名称 BuildPath ---> Configure Build Paht...中,然后上面有几个选项卡找到 Li ...

  7. jquery选择器案例

    一.预期效果 实现一个效果,如下. 品牌列表默认精简显示,单击“显示全部品牌”按钮显示全部品牌,同时列表将推荐的品牌的名字高亮显示,按钮里的文字变成“精简显示品牌”.再次点击“精简显示品牌”回到初始页 ...

  8. 深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  9. spring mvc 快速入门

    ---------- 转自尚学堂 高淇 --------- Spring  MVC 背景介绍 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC ...

  10. 固态硬盘与机械硬盘 SQL Server 单表插入性能对比测试

    测试环境