【CF736D】Permutations

题意:有一个未知长度为n的排列和m个条件,第i个条件$(a_i,b_i)$表示第$a_i$个位置上的数可以为$b_i$。保证最终合法的排列的个数是奇数。现在有m个询问,第i个询问是问你在去掉第i个条件后,最终合法的排列数是奇数还是偶数。

$n\le 2000,m\le min(C_n^2,500000)$

题解:神题,滚去学线代了。

因为在$\mod 2$意义下,-1和1相等,所以方案数是什么?如果把所给条件看成一个01矩阵的话,则答案就是这个矩阵对应的行列式的值!而去掉一个条件(a,b)后的答案是什么?1xor行列式的代数余子式$M_{ab}$的值!而题目保证所给矩阵是可逆的,所以我们可以应用性质:

$A^{*}=|A|A^{-1}$(其中$A^{*}$表示伴随矩阵,$A_{ij}=M_{ji}$)

所以只需要求出原矩阵的逆即可,可以采用高斯消元。因为是$\mod 2$意义下的,所以可以采用bitset优化,时间复杂度$O({n^3\over 32})$。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <bitset>
using namespace std;
int pa[500010],pb[500010];
bitset<4001> v[2005];
int n,m;
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
} int main()
{
n=rd(),m=rd();
int i,j;
for(i=1;i<=m;i++) pa[i]=rd()-1,pb[i]=rd()-1,v[pa[i]][pb[i]]=1;
for(i=0;i<n;i++) v[i][i+n]=1;
for(i=0;i<n;i++)
{
if(!v[i][i])
{
for(j=i+1;j<n;j++) if(v[j][i]) break;
swap(v[j],v[i]);
}
for(j=0;j<n;j++) if(j!=i&&v[j][i]) v[j]^=v[i];
}
for(i=1;i<=m;i++)
{
if(v[pb[i]][pa[i]+n]) puts("NO");
else puts("YES");
}
return 0;
}

【CF736D】Permutations 线性代数+高斯消元的更多相关文章

  1. P3265 [JLOI2015]装备购买(高斯消元+贪心,线性代数)

    题意; 有n个装备,每个装备有m个属性,每件装备的价值为cost. 小哥,为了省钱,如果第j个装备的属性可以由其他准备组合而来.比如 每个装备属性表示为, b1, b2.......bm . 它可以由 ...

  2. 【高斯消元】CDOJ1785 曜酱的线性代数课堂(三)

    高斯消元求行列式板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  3. 【高斯消元】CDOJ1784 曜酱的线性代数课堂(二)

    高斯消元求矩阵秩板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  4. 【高斯消元】CDOJ1783 曜酱的线性代数课堂(一)

    高斯消元求逆矩阵板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  5. [高斯消元] POJ 2345 Central heating

    Central heating Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 614   Accepted: 286 Des ...

  6. 高斯消元 分析 && 模板 (转载)

    转载自:http://hi.baidu.com/czyuan_acm/item/dce4e6f8a8c45f13d7ff8cda czyuan 先上模板: /* 用于求整数解得方程组. */ #inc ...

  7. POJ 1830 开关问题(高斯消元)题解

    思路:乍一看好像和线性代数没什么关系.我们用一个数组B表示第i个位置的灯变了没有,然后假设我用u[i] = 1表示动开关i,mp[i][j] = 1表示动了i之后j也会跟着动,那么第i个开关的最终状态 ...

  8. poj1222(枚举or高斯消元解mod2方程组)

    题目链接: http://poj.org/problem?id=1222 题意: 有一个 5 * 6 的初始矩阵, 1 表示一个亮灯泡, 0 表示一个不亮的灯泡. 对 (i, j) 位置进行一次操作则 ...

  9. 【BZOJ-3143】游走 高斯消元 + 概率期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2264  Solved: 987[Submit][Status] ...

随机推荐

  1. nginx配置ThinkPHP配置

    配置时注意红色部分 server { listen 8888 default_server; #listen [::]:80 default_server; server_name _; root / ...

  2. 深入理解Java虚拟机(一)

    一.运行时数据区域 ​ 1.程序计数器: 当前线程执行字节码的行号指示器(通过改变计数器的值来选择下条需要执行的字节码指令) 每个线程有独立的程序计数器(线程私有,为了切换线程时能恢复到挣钱的执行位置 ...

  3. Oracle:使用二进制工具修改高版本的 exp (dump)文件,以便 低版本 imp 工具 导入

    printf "\x31" | dd of=product_2018-10-08.dmp conv=notrunc bs=1 count=1 seek=12

  4. java痛苦学习之路[十]--日常问题汇总

    FIddler2 1.FIddler2  request请求的參数出现中文乱码问题时,须要进行一下设置: 打开注冊表编辑器,找到HKCU\Software\Microsoft\Fiddler 2\,在 ...

  5. 架设SVN服务器

    服务器端:windows 2003 + subversion 下载地址:http://subversion.tigris.org/servlets/ProjectDocumentList?folder ...

  6. iOS 苹果标识符

  7. php mongodb manager 查数据的各种姿势

    一.连接 mongodb 数据库 以下操作默认都是以上面操作为前提(已连接成功)而做的操作 二.查的各种姿势 1)通过主键_id来查询,注意:_id不是直接用字符串来表示,要用 new \MongoD ...

  8. 执行RF测试只生成output.xml文件,不生成log和report文件

    命令格式: -l --log file HTML log file. Can be disabled by giving a special value `NONE`. Default: log.ht ...

  9. Python 扩展知识

    Python 练习题 Python 编程习惯 Python 转义字符 Python 格式化输出 Python 列表表达式 Python 生成器表达式 Python 序列化 Python2 与 Pyth ...

  10. mybatis 之 parameterType="HashMap"参数包含list

    /** * 获得人气组合商品详情 * @param paramMap * @return */ public List<Goods> getCheckGoodsCombination(Ma ...