BZOJ 3168 [Heoi2013]钙铁锌硒维生素 ——矩阵乘法 矩阵求逆
考虑向量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 long const 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;
}
BZOJ 3168 [Heoi2013]钙铁锌硒维生素 ——矩阵乘法 矩阵求逆的更多相关文章
- BZOJ 3168: [Heoi2013]钙铁锌硒维生素 [线性基 Hungary 矩阵求逆]
3168: [Heoi2013]钙铁锌硒维生素 题意:给一个线性无关组A,再给一个B,要为A中每个向量在B中选一个可以代替的向量,替换后仍然线性无关.判断可行和求字典序最小的解 PoPoQQQ orz ...
- BZOJ 3168 Heoi2013 钙铁锌硒维生素 矩阵求逆+匈牙利算法
题目大意:给定一个n∗n的满秩矩阵A和一个n∗n的矩阵B.求一个字典序最小的1...n的排列a满足将随意一个Ai换成Bai后矩阵A仍然满秩 我们考虑建立一个二分图.假设Ai能换成Bj.就在i−> ...
- 【BZOJ】3168: [Heoi2013]钙铁锌硒维生素
题解 Ca Fe Zn Se 显然我们既然初始矩阵就能通过线性变换变成单位矩阵,则该矩阵一定有逆 没有逆输出NIE 而且因为这些向量两两正交,则表示一个向量的时候表示方法唯一 那么我们求一个逆可以求出 ...
- 【BZOJ3168】[Heoi2013]钙铁锌硒维生素 高斯消元求矩阵的逆+匈牙利算法
[BZOJ3168][Heoi2013]钙铁锌硒维生素 Description 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加宇宙比赛的饮食.众所周知,前往宇宙的某个星球,通常要花 ...
- 洛谷 P4100 [HEOI2013]钙铁锌硒维生素 解题报告
P4100 [HEOI2013]钙铁锌硒维生素 题目描述 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加 宇宙比赛的饮食. 众所周知,前往宇宙的某个星球,通常要花费好长好长的时间, ...
- BZOJ 1898: [Zjoi2004]Swamp 沼泽鳄鱼(矩阵乘法)
可以发现,如果没有鳄鱼,那么就是裸地一道题,但是可以发现鳄鱼最多每12次重复,那么就少于12的那部分dp,其他的就矩阵乘法就行了 PS:第一次吧矩阵乘法AC了好开心QAQ CODE: #include ...
- bzoj 2165: 大楼【Floyd+矩阵乘法+倍增+贪心】
1<<i的结果需要是long long的话i是long long是没用的--要写成1ll<<i--我别是个傻子吧 虽然写的是二进制贪心,但是我觉得二分可能更好写吧(但是会慢) ...
- BZOJ 3329 Xorequ 数字DP+矩阵乘法
标题效果:特定n,乞讨[1,n]内[1,2^n]差多少x满足x^3x=2x x^3x=2x相当于x^2x = 3x 和3x=x+2x 和2x=x<<1 因此x满足条件IFFx&(x ...
- Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)
2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2052 Solved: 1118 Description ...
随机推荐
- xml文件解析和序列化
转载:http://blog.csdn.net/liuhe688/article/details/6415593 XmlPullParser parser = Xml.newPullParser(); ...
- DVWA之文件包含(File inclusion)
daFile inclusion的意思就是文件包含,当服务器开启了allow_url_include选项时,就可以通过PHP的某些特征函数 include,require和include_once,r ...
- 解决flexpaper读取本地文件问题,JAVA+TOMCAT
flexpaper是不可以用绝对路径的调用本地或项目外的swf文件的,这个我们就有两种方法,一种是把swf和项目放在同一个目录下面,通过相对路径来获取 另一种是在运行项目的tomcat的server. ...
- 【2016新年版】年度精品 XP,32/64位Win7,32/64位Win8,32/64位Win10系统
本系统是10月5日最新完整版本的Windows10 安装版镜像,win10正式版,更新了重要补丁,提升应用加载速度,微软和百度今天宣布达成合作,百度成为win10 Edge浏览器中国默认主页和搜索引擎 ...
- 洛谷 1164 小A点菜
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...
- 在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个。必须提供所有成员。 (microsoft.sqlserver.smo)
问题:在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个.必须提供所有成员. (micro ...
- dubbo 分布式治理
1. dubbo 仅支持java语言之间的通讯. 2. dubbo 产生的背景是因为分布式的情况下产生的. 3. 解决服务治理的问题,通过注册中心进行管理 4.SOA 治理方案 tcp 协议传输,只需 ...
- 计算机图形学(Conputer Graphics):非均匀有理B样条
计算机图形学(Conputer Graphics):非均匀有理B样条 非均匀有理B样条(Non-Uniform Rational B-Spline)英文缩写,NURBS. 它是贝塞尔曲线的一个推广,而 ...
- classList属性和className的区别
className的不方便之处: 在操作类名时,需要通过className属性添加,删除和替换类名.因为className中是一个字符串,所以即使只修改字符串一部分,也必须每次都设置整个字符串的值.( ...
- grafana绘制图表
安装方法 系统为ubuntu16 1首先添加以下到/etc/apt/sources.list: deb https://packagecloud.io/grafana/stable/debian/ s ...