设$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. Reporting Service 告警"w WARN: Thread pool pressure. Using current thread for a work item"

    如果Reporting Service偶尔出现不可访问或访问出错情况,这种情况一般没有做监控的话,很难捕捉到.出现这种问题,最好检查Reporting Service的日志文件. 今天早上就遇到这样一 ...

  2. linux c++应用程序内存高或者占用CPU高的解决方案_20161213

    对于绝大多数实时程序来说,实时处理相关程序中的循环问题所带来的对机器的损耗和自身的处理速度的平衡,以及与其他程序的交互以及对其他功能的影响难免会成为程序设计中最大的障碍同时也是最大的突破点. 在所有这 ...

  3. android break 与 return 的区别

    break 的含义是中断,return 的含义是结束整个方法的执行. 区别. public static void main(String agrs[]){ int i; for(i=0;i<1 ...

  4. 浅谈Linux中的信号处理机制(三)

    一晃眼,已经到9月底了,都来不及去感慨时间匆匆.最近常常会想明年的今天我将会在那里干着什么样的工作?对未来又是憧憬又是担忧,压力山大.无论如何现在还是踏踏实实的学习吧,能这样安安静静学习的日子也不多了 ...

  5. 《小白的CFD之旅》招募写手

    <小白的CFD之旅>系列招募写手. 由于工作繁忙,<小白的CFD之旅>系列更新缓慢,现招募志愿者写手.这是一个分享平台,欢迎各位愿意分享自己CFD学习经历的朋友们. <小 ...

  6. [WPF系列]Button 自定义

    A Simple Cross Button for WPF   CREATING MORE COMPLEX BUTTONS IN XAML   WPF Custom Controls - Withou ...

  7. 帆软报表FineReport中数据连接之Websphere配置JNDI连接

    以oracle9i数据源制作的模板jndi.cpt为例来说明如何在FineReport中的Websphere配置JNDI连接.由于常用服务器的JNDI驱动过大,帆软报表FineReport中没有自带, ...

  8. 理解ThreadLocal(之一)

    ThreadLocal是什么 在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编 ...

  9. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 基于数据库资源的多语言实现

    以前的开发平台里,是用xml语言包实现了多语言功能,现在新的平台里进行了调整,把多语言包资源放在数据库表里实现了. 我们系统预留了多语言的配置全局变量.可以通过配置这个参数达到切换多语言的目的 我们在 ...

  10. TEXTAREA自适应文字行数的多少

    <textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight&qu ...