https://www.luogu.com.cn/problem/P4100
题目大意:

首先构造两个矩阵A,B
把A,B转置一下变成AT,BTA^T,B^TAT,BT
就相当于是写成把若干个向量拼成矩阵的形式
然后可以得到
B=RAB=RAB=RA保证R[i][j]!=0R[i][j]!=0R[i][j]!=0才能让A[i]A[i]A[i]用B[j]B[j]B[j]代替,不然说明B[j]B[j]B[j]会与除了A[i]A[i]A[i]外的向量线性相关
所以R=BA−1\large R=BA^{-1}R=BA−1
具体做的话可以在AAA后面接一个伴随矩阵BBB然后把AAA消元成单位矩阵,这时候BBB就变成RRR了
再根据RRR连边跑最大匹配(字典序最小的)即可
code:

#include<bits/stdc++.h>
#define N 605
using namespace std;
const double eps = 1e-9;
int vis[N], match[N], n;
double a[N][N], b[N][N];
int dfs(int u) {for(int v = 1; v <= n; v ++) if(!vis[v] && fabs(b[u][v]) > eps) {vis[v] = 1;if(!match[v] || dfs(match[v])) {match[v] = u;return 1;}}return 0;
}
int dfss(int u, int fr) {for(int v = 1; v <= n; v ++) if(!vis[v] && fabs(b[u][v]) > eps) {vis[v] = 1;if(match[v] == fr || (match[v] > fr && dfss(match[v], fr))) {match[v] = u;return v;}}return 0;
}
int main() {scanf("%d", &n);for(int i = 1; i <= n; i ++)for(int j = 1; j <= n; j ++)scanf("%lf", &a[j][i]);for(int i = 1; i <= n; i ++)for(int j = 1; j <= n; j ++)scanf("%lf", &b[j][i]);for(int i = 1; i <= n; i ++) {int j = i;for(int k = i + 1; k <= n; k ++) if(fabs(a[k][i]) > fabs(a[j][i])) j = k;if(j != i) swap(a[i], a[j]), swap(b[i], b[j]);double x = a[i][i];if(fabs(x) < eps) { printf("NIE"); return 0;}for(int j = 1; j <= n; j ++) a[i][j] /= x, b[i][j] /= x;for(int j = 1; j <= n; j ++) if(j != i) {double t = a[j][i];for(int k = 1; k <= n; k ++) {a[j][k] -= a[i][k] * t;b[j][k] -= b[i][k] * t;}}}
//    for(int i = 1; i <= n; i ++) {//        for(int j = 1; j <= n; j ++) printf("%.3lf ", b[i][j]); printf("\n");
//    }for(int i = 1; i <= n; i ++) {memset(vis, 0, sizeof vis);if(!dfs(i)) { printf("NIE"); return 0;}}//  for(int i = 1; i <= n; i ++) printf(" %d ", match[i]); printf("\n");puts("TAK");for(int i = 1; i <= n; i ++) {memset(vis, 0, sizeof vis);printf("%d\n", dfss(i, i));}return 0;
}

luogu P4100 [HEOI2013]钙铁锌硒维生素相关推荐

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

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

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

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

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

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

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

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

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

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

  6. BZOJ3168: [Heoi2013]钙铁锌硒维生素

    传送门 题意 给定一个满秩的矩阵 AAA ,另一个矩阵 BBB 对于 AAA 的每个行向量 AiA_iAi​ 找到一个匹配 BBB 的行向量 BpiB_{p_i}Bpi​​ 使得 AiA_iAi​ 替 ...

  7. [HEOI2013] 钙铁锌硒维生素

    Description 给定2N2N个行向量A1,-,AN,B1,-,BNA_1,\dots,A_N,B_1,\dots,B_N,需要设计一种替换方案,AiA_i被BjB_j替换(i∈[1,N],j∈ ...

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

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

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

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

最新文章

  1. WPF WindowStyle为None
  2. 访问备份数据寄存器时,需要打开BKP时钟吗?
  3. 【计算机组成原理】定点数的表示和运算
  4. Java 获取 URL 响应头信息
  5. 员工离职时被HR回复“猝死了再说”!HR道歉:没控制好情绪
  6. unity中Rotation * Position的意义
  7. ARX二次开发 遍历删除所有的约束
  8. pcie转sata3硬盘不启动_XPS 笔记本: 排除对 BIOS 默认设置的更改导致无法开机自检/无引导/硬盘或未检测到 SDD 问题...
  9. 帝国CMS 7.5仿《讲历史网》模板/优秀的历史网帝国CMS模板下载
  10. VC++实现镜像劫持(360保险箱启动原理)
  11. 硬盘属于计算机主机的一部分,计算机的硬件组成部分分别是什么?
  12. 湖南麒麟下安装mellanox网卡驱动问题
  13. 为什么都是技术合伙人被踢出局?
  14. 大阪第83天——可怕的日本(转贴)
  15. 图解TCP/IP 第一章 网络基础知识
  16. 让星星⭐月亮告诉你,打印完全格式的日期格式 包含 年月日时分秒毫秒
  17. Tomcat 中 GET方式 请求 中文乱码 出现的原因
  18. 灵感1-把歌曲(mp3等)转换乐谱(简谱、五线谱)等
  19. 用百度地图实现添加电子围栏并判断是否在范围内
  20. 时差 频差 双星定位 matlab,一种基于双星时差频差无源定位的伪距差分方法

热门文章

  1. 信签纸有虚线怎么写_写观后感的信签纸格式
  2. 4G DTU和4G工业路由器有哪些区别?
  3. 海康威视官方安装包(提供64位安装包)
  4. 糟糕,系统又被攻击了
  5. Vue开发实例(11)之el-menu实现左侧菜单导航
  6. 制作系统光盘Server 2003 总结
  7. 周爱民 - 架构师能力模型
  8. 使用Kubeadm快速部署K8S集群
  9. 读书笔记||控制论、信息论、系统论
  10. C语言小案例_小程序学习(三)