Codeforces 382 D Permutations
题目大意:
给出一张二分图,这张二分图完美匹配的个数是奇数,求删掉第$i(1<=i<=m)$条边后完美匹配个数的奇偶性。
设这张图的邻接矩阵为$A$,那么完美匹配的个数为$A$的积和式,即
$$\sum_p \prod_i^n a_{pi}$$
因为乘上-1不影响奇偶性,所以这个东西和行列式的奇偶性是一样的。
因为矩阵的行列式可以表示为某一行或一列上所有元素与这个位置的代数余子式之积的和,即
$$\sum _{i=1}^{n}a_{i,j} \times m_{i,j}$$
或
$$\sum _{j=1}^{n}a_{i,j} \times m_{i,j}$$
$m_{i,j}$为这个位置的代数余子式,所以我们只要求出每个位置的代数余子式就能知道任意$a_{i,j}$从$1$变$0$答案会改变多少
设$A$的伴随矩阵为$C$,根据定义$C_{i,j}=m_{j,i}$,即$m$所构成的矩阵的转置,而$C=|A|\times A^{-1}$,这题就可以bitset压位跑过了。
证明$C=|A|\times A^{-1}$:
根据定义$C_{i,j}=m_{j,i}$,因此
$$(C \times A)_{i,j} \\ =\sum_{k=1}^{n} C_{i,k} \times A_{k,j} \\=\sum_{k=1}^{n} m_{k,i} \times A_{k,j}$$
这个式子相当于把第$i$列复制到第$j$列,然后在第$j$列展开求行列式。
根据常识,当$i=j$时,$(C \times A)_{i,j}=|A|$
当$i!=j$时,$(C \times A)_{i,j}=0$
则$C \times A=|A|\times I,C=|A|\times A^{-1}$
#include<bits/stdc++.h>
#define N 500005
using namespace std;
int n,m;
bitset<2048>a[2005],b[2005];
int x[N],y[N];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x[i],&y[i]);
a[x[i]][y[i]]=1;
}
for(int i=1;i<=n;i++)b[i][i]=1;
for(int i=1;i<=n;i++)
{
int p=0;
for(int j=i;j<=n;j++)if(a[j][i]){p=j;break;}
if(p!=i)swap(a[p],a[i]),swap(b[p],b[i]);
for(int k=1;k<=n;k++)if(a[k][i]&&k!=i)a[k]^=a[i],b[k]^=b[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
int t1=b[i][j],t2=b[j][i];
b[i][j]=t2;b[j][i]=t1;
}
}
for(int i=1;i<=m;i++)
{
if(b[x[i]][y[i]])
{
puts("NO");
}
else puts("YES");
}
return 0;
}
Codeforces 382 D Permutations的更多相关文章
- Codeforces 323C Two permutations
题目描述 You are given two permutations pp and qq , consisting of nn elements, and mm queries of the for ...
- Codeforces 1089I - Interval-Free Permutations(析合树计数)
Codeforces 题面传送门 & 洛谷题面传送门 首先题目中涉及排列的 interval,因此可以想到析合树.由于本蒟蒻太菜了以至于没有听过这种神仙黑科技,因此简单介绍一下这种数据结构:我 ...
- codeforces Gargari and Permutations(DAG+BFS)
/* 题意:求出多个全排列的lcs! 思路:因为是全排列,所以每一行的每一个数字都不会重复,所以如果有每一个全排列的数字 i 都在数字 j的前面,那么i, j建立一条有向边! 最后用bfs遍历整个图, ...
- CodeForces - 296A-Yaroslav and Permutations(思维)
Yaroslav has an array that consists of n integers. In one second Yaroslav can swap two neighboring a ...
- Codeforces Round #485 (Div. 2) E. Petr and Permutations
Codeforces Round #485 (Div. 2) E. Petr and Permutations 题目连接: http://codeforces.com/contest/987/prob ...
- Codeforces 285 E. Positions in Permutations
\(>Codeforces \space 285 E. Positions in Permutations<\) 题目大意 : 定义一个长度为 \(n\) 的排列中第 \(i\) 个元素是 ...
- Codeforces Round #198 (Div. 2) E. Iahub and Permutations —— 容斥原理
题目链接:http://codeforces.com/contest/340/problem/E E. Iahub and Permutations time limit per test 1 sec ...
- 贪心 CodeForces 124B Permutations
题目传送门 /* 贪心:全排列函数使用,更新最值 */ #include <cstdio> #include <algorithm> #include <cstring& ...
- Codeforces Round #382 Div. 2【数论】
C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...
随机推荐
- BugkuCTF sql注入
前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...
- Ionic 2 官方示例程序 Super Starter
原文发表于我的技术博客 本文分享了 Ionic 2 官方示例程序 Super Starter 的简要介绍与安装运行的方法,最好的学习示例代码,项目共包含了 14 个通用的页面设计,如:引导页.主页面详 ...
- Mysql抓包工具 - MySQL Sniffer 使用小结 (含带general_log日志)
在mysql运维工作中,一般会使用tcpdump做一些分析(直接读分析日志比较难以看明白,在数据库连接值高时使用):对于mysql实时的连接监控分析,通常会使用"mysqladmin/sho ...
- git 配置别名
对于常用的git的命令,可以通过配置别名的方式,提高工作效率. $ git config --global alias.co checkout //执行git co 相当于git checkout $ ...
- 容斥原理I
普利斯记号 以下以"人"代指受条件约束的元素. \(K(x)\)表示刚好\(x\)人满足条件的方案数. \(S(x)\)表示至少\(x\)人满足条件的方案数. \(C(x)\)表示 ...
- PLSQL使用技巧 如何设置默认显示My Objects、记住密码等
https://www.cnblogs.com/yilinzi/p/7144852.html PL/SQL Developer实现双击table查询 https://blog.csdn.net/zhy ...
- wordcount程序
wordcount程序算是相比于前几次作业来说比较难得一个作业了.进行了一次真的自己编写程序.WC程序实现了对txt文件中的数据的计数,算出程序中有多少单词.字符数以及行数.这次的程序编程是采用的C语 ...
- 《Linux内核设计与实现》读书笔记六
第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最 ...
- Sprint 冲刺第三阶段第3-5天 数据库代码
数据库代码: package com.example.brdemo; import android.app.Activity; import android.content.Intent; impor ...
- C++中struct 和 class的区别
首先,C++中类的定义,从狭义上理解,就是我们使用的class类型.从广义上,类就是定义了一个新的类型和新的作用域,它具有成员函数和成员数据. 而对广义类定义的实现分为两种,一种是使用struct实现 ...