bzoj3168: [Heoi2013]钙铁锌硒维生素

设$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);
}

  

时间: 2024-10-13 06:31:27

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

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

[BZOJ3168][Heoi2013]钙铁锌硒维生素 Description 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加宇宙比赛的饮食.众所周知,前往宇宙的某个星球,通常要花费好长好长的时间,人体情况在这之间会发生变化,因此,需要根据每天的情况搭配伙食,来保证营养.小林把人体需要的营养分成了n种,这些营养包括但不限于铁,钙.他准备了2套厨师机器人,一套厨师机器人有n个,每个厨师机器人只会做一道菜,这道菜一斤能提供第i种营养xi微克.想要吃这道菜的时候,只要输入一个数,就

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

题目大意:给定一个n?n的满秩矩阵A和一个n?n的矩阵B.求一个字典序最小的1...n的排列a满足将随意一个Ai换成Bai后矩阵A仍然满秩 我们考虑建立一个二分图.假设Ai能换成Bj.就在i?>j之间连接一条边 那么这个图怎么建呢? 考虑一个行向量Bi,我们在A中找到最小的行向量集合满足Bi能够被这些行向量线性表出,那么显然Bi仅仅能替换这些行向量 我们能够设矩阵C满足C?A=B,那么C=B?A?1 Ci,j≠0表示Bi的线性表出须要Aj,因此CT就是这个二分图的邻接矩阵 如今我们有了一个二分图

【BZOJ】【3166】【HEOI2013】Alo

可持久化Trie+set Orz zyf…… 搞区间中次大值不好搞,那么我们就反过来,找一个数,然后看它在哪些区间里是次大值…… (然而事实上我们并不用真的把这个区间具体是什么找见,只要知道它可以跟哪一段数搞Xor就可以了! 而这个区间就是……左边第二个比他大的数的位置+1 ~ 右边第二个比它大的数的位置-1 这中间所有数都可以跟它搞Xor= =,我们总能找到一个相应的区间…… (我一开始理解成,这个区间就是我们要找的,a[i]为次大数的区间,然而这不是左边有一个比它大的,右边也有一个比它大的吗

维生素补充剂,天然好还是合成好

什么是维生素补充剂?      维生素补充剂是为了保证特殊人群每日摄入足量的维生素而天然提取或者合成的片剂或胶囊.特殊人群包括:饮食不规律.食物种类单一而导致维生素摄入不足的人群:另一类是被诊断出患有维生素缺乏症的人群.   维生素补充剂的分类      天然维生素补充剂:以天然食物为原料,经过提取.浓缩等物理或化学过程而制得的保健品.合成维生素补充剂:根据维生素的化学结构,人工地利用化学原料而合成的具有相同成分的维生素.   天然补充剂和合成补充剂的比较 从价格看:到药店可以发现,同是维生素C

BZOJ 3166: [Heoi2013]Alo

3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 923  Solved: 437[Submit][Status][Discuss] Description Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG ,如名字所见,到处充满了数学的谜题.现在你拥有n颗宝石,每颗宝石有一个能量密度,记为ai,这些宝石的能量密度两两不同.现在你可以选

BZOJ 3165: [Heoi2013]Segment

3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 465  Solved: 187[Submit][Status][Discuss] Description 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第i条被插入的线段的标号为i. 2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号. Input 第一行一个整数n,表示共n 个操作. 接下来n行,每行第一

维生素C

维生素C,真不是“万能良药”     在生活中,经常听到这样的对话: “我好像感冒了……” “吃点维生素C吧……” “我嘴里长了个溃疡……” “吃点维生素C吧……” “我嘴唇裂了……” “吃点维生素C吧……” 有人开玩笑说“多喝热水.早点睡觉.重启一下”是解决任何问题的三大法门,而维生素C则颇有名列第四的势头——当一个人生病的时候,人们常说的就是吃点维生素C,但它难道真是一种万能药吗? 作为人体必需营养素的维生素C确实有很多重要的生理作用,自然不能缺少,但也不是多多益善,在注意食物选择和烹调方法

Bzoj 3165 [Heoi2013]Segment题解

3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 668  Solved: 276[Submit][Status][Discuss] Description 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第i条被插入的线段的标号为i. 2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号. Input 第一行一个整数n,表示共n 个操作. 接下来n行,每行第一

正常人需要每天都服用维生素补充剂么?

正常人需要每天都服用维生素补充剂么? 关于维生素补充剂,最早不是起源于我大天朝,而是起源于歪果仁,服用也是从国外开始,并借由太平洋的风,把这种文化传入我大天朝. 那么这种习惯或者说文化,为什么会出现呢?存在的理由又是什么呢? 小编找了一下资料,关于为什么会出现维生素补充剂,严格来说算是资本主义运作到一定时代的产物吧,具体原因无从追求. 但是存在理由,小编是从一个外国人那里的到答案. 事情是这样的,我有一个朋友是做外贸的,有一次他接待了一个国外来的客户.按照我大天朝的习惯远来是客,怎么也得请人吃顿